Cosa rende "buono" l'OOP? [duplicare]

10

È abbastanza ovvio che l'OOP è visto come una sorta di pallottola d'argento di programmazione oggi. In ogni corso di informatica, i meriti di OOP sono annunciati.

Mi piacerebbe sapere perché persone come OOP. Ad essere onesti, combinare procedure, tipi e strutture dati in un singolo conglomerato mi sembra un problema. Preferirei piuttosto vedere i dati semplicemente come dati. Mi piace essere in grado di pensare che passerò i dati corretti attraverso una funzione e otterrò il risultato giusto, e non dovrò considerare che i dati sono in grado di operare su se stessi.

Inoltre, voglio sapere se ci sono dei buoni esempi di programmi robusti scritti specificamente con o senza OOP, che hanno il loro codice sorgente disponibile.

    
posta jepugs 19.05.2013 - 08:22
fonte

2 risposte

6

To be honest, combining procedures, types, and data structures into a single conglomerate seems bad to me. I'd much rather view data as simply data. I like to be able to think that I will pass the right data through a function and get the right output, and not have to consider that the data is capable of operating on itself.

Qui ignori o sembri non capire uno dei pilastri fondamentali dell'Oggetto-Orientamento e questo è l'incapsulamento. Il punto di OOP è che non esiste una struttura dati e non ci sono algoritmi quando si usa il "conglomerato"; ci sono dati e algoritmi solo quando lo costruisci, e solo tu - il creatore della classe - dovresti sapere o preoccuparti di quali algoritmi o quali strutture di dati vengono utilizzate. Questo, combinato con l'altro 2 (polimorfismo ed ereditarietà - PIE) fornisce un grande meccanismo di riutilizzo e una grande astrazione.

L'oggetto stesso fornisce una grande astrazione; espone (o idealmente dovrebbe esporre) solo il comportamento, il che significa che può essere facilmente cambiato con un altro oggetto con un comportamento simile o può essere riutilizzato in un altro posto che richiede un comportamento simile. Ciò porta a quella che è probabilmente la cosa più importante di OOP - la modularizzazione. Fondamentalmente il tuo programma diventa un insieme di moduli liberamente accoppiati che comunicano tra loro solo tramite lo scambio di messaggi, il che è un grande miglioramento rispetto al vecchio modo di programmare in cui hai dati e algoritmi separatamente che operano su dati (globali).

Ciò ha portato alla produzione di framework, che in realtà fanno la maggior parte del lavoro lasciando il programmatore solo con il lavoro di personalizzazione con le regole della logica di business e fornendo hook in esso. Ciò riduce notevolmente i tempi di programmazione e rende fattibile la creazione di sistemi sempre più grandi.

Da un altro punto di vista, la programmazione orientata agli oggetti semplifica notevolmente la parte di modellazione in quanto gli oggetti possono essere modellati in modo più naturale in costrutti di programmazione.

Ma l'OOP non è un proiettile d'argento; come disse famoso Fred Brooks: "non ci sono proiettili d'argento". Gran parte della teoria sull'OPA ideale non è applicata correttamente, il che produce programmi cattivi.

Also, I want to know if there are any good examples of robust programs written specifically with or without OOP, that have their source code available.

Il fatto è che esiste una vasta serie di progetti che sono fattibili solo per essere costruiti in un approccio orientato agli oggetti principalmente a causa della complessità intrinseca.

    
risposta data 19.05.2013 - 11:55
fonte
3
  1. Modularizzazione: - Decompone il problema in sottoproblemi più piccoli che possono essere risolti separatamente.

  2. Astrazione (Understandability): -Terminologia del dominio del problema si riflette nella soluzione software. (I singoli moduli sono comprensibili più facilmente dai lettori umani.)

  3. Incapsulamento (nascondere informazioni): - Nascondere la complessità all'utente di un software dell'SDK. Proteggi le funzionalità di basso livello.

  4. Composability (Structured Design): -Interfaces consente di combinare liberamente i moduli per produrre nuovi sistemi.

  5. Gerarchia: -Sviluppo incrementale da moduli piccoli e semplici a più complessi.

  6. Continuità: -I cambiamenti e la manutenzione in pochi moduli non influiscono sull'architettura.

risposta data 19.05.2013 - 10:07
fonte

Leggi altre domande sui tag