Oltre al polimorfismo, che cosa rende interessante OOP? [duplicare]

6

Quando sono arrivato per la prima volta a OOP (inizialmente in Java e poi in C ++) dopo anni di lavoro in C e VB, è stato fantastico. L'idea di estendere il comportamento esistente e di operare genericamente su cose di tipi correlati era molto allettante, e ho visto quasi immediatamente perché volevo questo. Cioè, la mia motivazione per OOP era sottotipizzare il polimorfismo e l'ereditarietà.

Avanziamo rapidamente fino ad oggi, e uso regolarmente soluzioni di polimorfismo ad hoc (tipografie e digitazioni di anatre) che risolvono i problemi sottotitolati che inizialmente mi interessavano in modi molto eleganti. Ho accesso al polimorfismo parametrico nella maggior parte dei miei ambienti. Programmare genericamente con questi diversi tipi di polimorfismo mi dà tutta l'estensibilità e riutilizzo dell'eredità mai e ancora.

Quindi, la mia domanda è: perché dovrei ancora preoccuparmi di OOP? Quali usi di OOP hai trovato che sono davvero grandi oltre all'ereditarietà e alla sottotipizzazione?

Inoltre, "perché è popolare e dovrai usarlo" non conta. Conosco già abbastanza bene OOP e lo utilizzo nel mio lavoro diurno perché viene utilizzato dal codice base. Per un nuovo progetto, o per me stesso, è quello che sto chiedendo.

    
posta singpolyma 30.04.2013 - 22:22
fonte

4 risposte

4

Senza essere impantanati in una discussione semantica sulla definizione precisa di OOP, direi che se si utilizza il polimorfismo, come si nota, si sta utilizzando il vantaggio principale di OOP.

L'uso di classi di tipi o digitazione anatra è in realtà solo un altro modo per raggiungere lo stesso obiettivo. Non stai utilizzando lo stile C ++ / Java dell'orientamento agli oggetti ereditato, ma stai ancora progettando il concetto di oggetti dattiloscritti. Secondo me questo è un altro stile di OOP (distinto dallo stile ereditato in C ++), o è qualcosa di così vicino a OOP che è solo nominalmente diverso.

Oltre al polimorfismo, cosa c'è di così interessante nell'OOP in stile C ++? Solo lo stile C ++, se ti piace.

    
risposta data 30.04.2013 - 22:34
fonte
4

Oltre al polimorfismo dell'ereditarietà e del sottotipo, ecco una lista con grandi cose sul paradigma orientato agli oggetti:

  • Incapsulamento - mantenere nascosti i dati e la struttura interna offre una grande flessibilità nel cambiarli
  • Modularizzazione - La maggior parte dei linguaggi orientati agli oggetti sono basati su classi che rendono la modularizzazione più naturale; anche ogni modulo dovrebbe comunicare ad altri moduli tramite interfacce ben definite
  • Separazione delle preoccupazioni - Ogni modulo / classe dovrebbe fare una cosa; ed è più facile identificare ciò che fa
  • Facilità di modellazione - le entità di dominio possono essere naturalmente modellate in oggetti
  • Gestione delle eccezioni - sebbene non sia realmente una funzionalità di OOP, è associato principalmente alle lingue OO
  • Riusabilità - Il paradigma OO ha portato framework che è un ottimo modo per riutilizzare il codice
  • Fattibilità nella costruzione di grandi progetti - Fondamentalmente, il paradigma orientato agli oggetti è l'unico modo fattibile in cui possiamo costruire abbastanza facilmente un sistema di grandi dimensioni

Il grande vantaggio di OOP rispetto agli altri è l'idea della modularizzazione; qui ci sono molti moduli che comunicano tra loro inviando messaggi tra di loro. Questo è un grande miglioramento rispetto al vecchio modo di programmare se avessi dati e molte subroutine che cambiano gli stessi dati.

    
risposta data 30.04.2013 - 23:38
fonte
3

Come qualcuno che non è mai stato particolarmente innamorato di OOP, posso pensare ad un paio di motivi per usarlo.

Uno è, è una buona corrispondenza per alcuni tipi di problemi, come i toolkit della GUI. Questo non vuol dire che non puoi usare altre strutture per risolvere lo stesso problema, solo che l'OOP è ben adattato ad esso.

Un altro motivo è che, per tutto il clamore di vecchia data, i linguaggi classici orientati agli oggetti forniscono un supporto decente per la programmazione in generale. Certo, l'OOP non ha il monopolio su questo genere di cose, e potresti anche considerarlo come un effetto collaterale di "è popolare". Ciò nonostante, è un modo ben collaudato per risolvere anche questo problema.

Non so se uno di questi sia ciò che chiamereste "avvincente", ma d'altro canto, direi anche che il polimorfismo ad hoc è quasi sovrascritto oggigiorno come lo era OOP. Entrambi i set di funzionalità del linguaggio sono set di strumenti che possono o non possono essere particolarmente utili in un determinato contesto. Inoltre, sono spesso utili in combinazione; non ha senso recitare come se fosse una competizione tra loro.

    
risposta data 30.04.2013 - 23:02
fonte
0

Oltre alle risposte già fornite vorrei offrire i seguenti vantaggi:

  • È un paradigma ben noto, quindi utilizzando OOP in modo appropriato consentirai a molti altri sviluppatori di lavorare con il tuo codice più facilmente
  • Esiste un ampio corpus di conoscenze basate su OOP che utilizza elementi come i modelli di progettazione
  • La maggior parte dei framework presuppone anche una certa conoscenza di OOP per poterli utilizzare

Sono sicuro che ci sono molte più ragioni, ma noterai che questi motivi non variano molto da quello che hai già detto come "perché è popolare".

Sì, dovrai usarlo in una certa misura, ma quello che mi sembra di leggere è che non è eccitante per te e che non ti senti in dovere di lavorare con OOP al di fuori del tuo lavoro professionale o almeno non è una forza trainante. Quindi, per rispondere alla tua domanda con una domanda, perché non trovi qualcosa che ti eccita di nuovo nella programmazione?

Ho avuto la stessa opinione su OOP dopo essere stato così eccitato quando ho iniziato con C ++ (di nuovo indietro quando ..) mi sentivo annoiato e stavo perdendo il mio senso. Uso sempre OOP quotidianamente nel mio lavoro professionale, ma ho trovato grande entusiasmo nell'apprendimento di nuove cose come la programmazione funzionale (Haskell), ad esempio. È nuovo per me ed eccitante e ho la sensazione di imparare cose nuove di nuovo. Sciocco? Forse, ma ha portato un po 'di divertimento a quello che faccio di nuovo. Forse questa è la risposta che stai cercando.

    
risposta data 30.04.2013 - 23:32
fonte

Leggi altre domande sui tag