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.