Nell'unico blog di sviluppo che ho letto, da quel ragazzo Joel-On-Software-Founder-of-SO, ho letto molto tempo fa che OO non porta ad aumenti di produttività. La gestione automatica della memoria lo fa. Freddo. Chi può negare i dati?
Credo ancora che OO sia non-OO come programmare con le funzioni è programmare tutto in linea.
(E dovrei sapere, come ho iniziato con GWBasic.) Quando si refactoring il codice per usare le funzioni,
variable2654
diventa
variable3
il metodo in cui ci si trova. O, meglio ancora, ha un nome che si può capire
e se la funzione è breve , si chiama
value
ed è sufficiente per la piena comprensione.
Quando il codice senza funzioni diventa codice con metodi, puoi eliminare miglia di codice.
Quando si refactoring del codice per essere veramente OO, b
, c
, q
, e Z
diventare this
, this
, this
e this
. E poiché non credo nell'uso della this
parola chiave, puoi eliminare miglia di codice. In realtà, puoi farlo anche se lo usi this
.
Non penso che OO sia una metafora naturale.
Non penso che il linguaggio sia una metafora naturale, né penso che gli "odori" di Fowler siano meglio di dire "questo codice ha un cattivo sapore". Detto questo, penso che OO non riguardi metafore naturali e le persone che pensano che gli
oggetti appena spuntati su di te non abbiano sostanzialmente ragione.
Definisci l'universo degli oggetti, e gli universi degli oggetti migliori danno come risultato un codice più breve, più facile da capire, che funziona meglio o tutti questi (e alcuni criteri che sto dimenticando). Penso che le persone che usano gli oggetti naturali del cliente / dominio come oggetti di programmazione non abbiano il potere di ridefinire l'universo.
Ad esempio, quando si esegue un sistema di prenotazione di una compagnia aerea, ciò che si chiama una prenotazione potrebbe non corrispondere affatto a una prenotazione legale / commerciale.
Alcuni dei concetti di base sono strumenti davvero interessanti
Penso che la maggior parte della gente esageri con quella cosa "quando hai un martello, sono tutti chiodi". Penso che l'altro lato della medaglia / specchio sia altrettanto vero: quando hai un gadget come il polimorfismo / eredità, inizi a trovare usi dove si adatta come un guanto / calzino / lenti a contatto. Gli strumenti di OO sono molto potenti. Penso che l'ereditarietà singola sia assolutamente necessaria affinché le persone non si lascino trasportare, nonostante il mio
software multi-ereditarietà.
Qual è il punto di OOP?
Penso che sia un ottimo modo per gestire una base di codice assolutamente enorme. Penso che ti permetta di organizzare e riorganizzare il tuo codice e ti dia un linguaggio per farlo (oltre al linguaggio di programmazione in cui stai lavorando), e modularizza il codice in un modo abbastanza naturale e di facile comprensione.
OOP è destinato a essere frainteso dalla maggior parte degli sviluppatori
Questo perché è un processo che apre gli occhi come la vita: capisci OO sempre di più con l'esperienza e inizi a evitare determinati schemi e ad impiegarne altri man mano che diventi più saggio. Uno dei migliori esempi è che smetti di usare l'ereditarietà per le classi che non controlli e preferisci invece il modello
Facciata .
Per quanto riguarda il tuo mini-saggio / domanda
Volevo menzionare che hai ragione. La riusabilità è un sogno irrealizzabile, per la maggior parte. Ecco una citazione di Anders Hejilsberg sull'argomento (geniale) da qui :
Se chiedi ai programmatori principianti di scrivere un controllo calendario, spesso pensano a se stessi: "Oh, scriverò il miglior controllo calendario del mondo! Sarà polimorfico rispetto al tipo di calendario. Avrà displayer, e munger, e questo, quello e l'altro. " Devono spedire un'applicazione di calendario tra due mesi. Hanno messo tutta questa infrastruttura nel controllo e poi hanno trascorso due giorni a scrivere un'applicazione scadente del calendario su di essa. Penseranno: "Nella prossima versione dell'applicazione, farò molto di più".
Una volta che iniziano a pensare a come implementeranno effettivamente tutte queste altre concretizzazioni del loro disegno astratto, tuttavia, si scopre che il loro disegno è completamente sbagliato. E ora si sono dipinti in un angolo e devono buttare via tutto. L'ho visto ancora e ancora. Sono fermamente convinto di essere minimalista. A meno che tu non risolva effettivamente il problema generale, non provare a creare un framework per risolverne uno specifico, perché non sai come dovrebbe apparire quel framework.