Programmazione orientata agli oggetti: perché "orientata"?


14

Sono in gran parte attraverso il mio grado di programmazione di giochi. Non si tratta di una laurea in informatica, quindi gran parte della teoria viene evitata a favore della creazione pratica di portfolio e di quello che vedo come apprendimento JIT, che è apparentemente più importante nel settore dei giochi. Il primo argomento era "Introduzione alla programmazione orientata agli oggetti".

Quella frase non mi ha disturbato finché non ho appreso i diversi paradigmi di programmazione (sto ottenendo questo elenco da https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Imperativo
  • Funzionale
  • Procedurale
  • strutturato
  • Evento guidato
  • Orientato agli oggetti
  • Dichiarativo
  • Automata-Based

Capisco che questa non è una lista esaustiva e che non tutti questi concetti sono uguali e la maggior parte di essi non è nemmeno esclusiva, ma non capisco perché la maggior parte di essi ottenga solo una parola: imperativo; funzionale; dichiarativo - ma quando parliamo di programmazione con oggetti, dobbiamo chiarire che siamo orientati attorno a quegli oggetti. Non possiamo semplicemente usare oggetti? Non possiamo semplicemente avere oggetti? Perché devono orientarci come nostra stella guida?

Guardando qui ( https://en.wikipedia.org/wiki/Object-oriented_programming ), da nessuna parte viene usato il termine "orientato" come proprio termine. Viene spiegato solo "oggetto".

Inoltre, posso vedere per motivi pratici il motivo per cui viene utilizzato Event-Driven, poiché la programmazione degli eventi è già una cosa che fai quando stai gestendo una conferenza e la programmazione di Automata fa sembrare che tu stia impostando una linea di produzione robotizzata, quindi aiuta ad avere ulteriori chiarimenti lì.

Cosa rende la programmazione degli oggetti, come una frase, non abbastanza per descrivere ciò che facciamo quando usiamo gli oggetti nella nostra programmazione?

Ovviamente dal mio tono non sono troppo affezionato alla parola "orientato". Mi ricorda il mio tempo come reporter di corte, ascoltando avvocato dopo avvocato usare la frase "in relazione a" come una sorta di segno di spunta verbale. Non significava nulla; era solo un termine che riempivano l'aria mentre cercavano di pensare a cosa dire dopo. Tuttavia, non sto cercando di sostenere un cambio di lingua, sto solo chiedendo perché sia ​​così. Se qualcuno sa perché è diventato noto in quel modo per ragioni puramente storiche e rudimentali, allora questa è la risposta. Saranno munizioni se deciderò mai di perdere tempo a chiedere un cambio di lingua.

D'altra parte, se in realtà ci fosse una ragione utile per cui una lingua o un pezzo di codice deve puntare verso gli oggetti, con l'esclusione di tutte le altre direzioni, invece di limitarsi ad averli nella loro cintura degli strumenti , come strumenti , sarei davvero interessato a conoscerlo. Mi piace imparare cose utili.


11
Immagino che "oggettivamente" o "obiettivo" non darebbero la giusta impressione di ciò che realmente si intende ;-)
Doc Brown

Ho considerato "Objecified", ma ho deciso che potrebbe emettere anche vibrazioni sbagliate.
Excrubulent


1
Penso che "oggetto" sia l'errore, non "orientato". Quello che chiamiamo orientato agli oggetti è generalmente orientato alla classe.
Steve314,

1
Qualche fan di Phoenix Wright vuole semplicemente chiamarlo "OBJECTION !! Programming"?
Katana314,

Risposte:


24

Credo che stai leggendo modo troppo in un semplice costrutto grammaticale. Dai un'occhiata al tuo elenco di paradigmi, ordinati in modo diverso per un motivo che vedremo tra poco:

  • Imperativo
  • Funzionale
  • Procedurale
  • strutturato
  • Dichiarativo
  • Evento guidato
  • Automata-Based
  • Orientato agli oggetti

Cosa hanno in comune le parole? Sono tutti aggettivi perché intendono modificare la parola "programmazione". Inoltre, ad eccezione dell '"imperativo", non sono tutti aggettivi "naturali", ma nomi "corretti" - nomi che descrivono effettivamente il nucleo del paradigma: funzione, struttura, automi e oggetto.

E ci sono due modi diversi in cui i sostantivi sono modificati: attraverso un suffisso come -al o -ed, o attraverso la creazione di una parola composita usando un trattino. Ora, come ha sottolineato Doc Brown, i suffissi che potrebbero essere usati per adattare "oggetto" hanno un significato diverso. Che lascia la composizione.

E sostengo che è pura coincidenza o gusto che Alan Kay abbia scelto di usare "orientato" per il suo aggettivo composito "orientato agli oggetti". Potrebbe anche essere stato "guidato dagli oggetti", o "basato sugli oggetti", e potresti anche leggere troppo in quelli. "Guidato" non suona come una sorta di malsana ossessione?


1
Punto eccellente (anche se penso che intendi aggettivi, non avverbi - "programmazione" in questo contesto è un sostantivo).
JW01

@ JW01: oops, hai ragione
Michael Borgwardt,

Questo è in realtà un ottimo punto: la parola "orientata" dà alla frase un significato diverso alla "programmazione degli oggetti", perché la parola "oggetto" da sola non è un aggettivo. In realtà, direi che il motivo per cui "orientato" è stato scelto rispetto ad altre parole era per l'allitterazione. Inoltre, non stavo leggendo nulla in esso, stavo esagerando nel sottolineare che c'è questa parola "orientata" che sta lì completamente inspiegabile e indiscussa in letteratura, il che mi ha fatto chiedermi se stesse davvero facendo qualcosa per guadagnare il suo posto . : P
Excrubulent,

Mi chiedo perché non abbia scelto l'ossessione per l'oggetto ... oh sì, quelli sono solo gli zeloti che non sanno quando fermarsi. ;-)
Deduplicatore,

C'è un libro di un autore polacco, Jerzy Grębosz, chiamato "Symfonia C ++" ("La sinfonia in C ++") in cui l'autore cerca di dare un senso a quella frase in modo interessante: dice che si chiama " orientato agli oggetti "a causa del fatto che il codice può" orientarsi "in base all'oggetto con cui sta attualmente lavorando (comportamento polimorfico). Distingue questo dai linguaggi in cui esiste solo un semplice concetto di "oggetti" come pezzi di dati. Non ci sono prove storiche che questo fosse il significato originale, ma è abbastanza esplicativo anche come spiegazione post-factum.
BarbaraKwarc,

18

ma quando parliamo di programmazione con oggetti, dobbiamo chiarire che siamo orientati attorno a quegli oggetti. Non possiamo semplicemente usare oggetti? Non possiamo semplicemente avere oggetti?

Francamente, è un blocco della storia. La programmazione funzionale è davvero una programmazione orientata alle funzioni, la programmazione dichiarativa è davvero una programmazione orientata alle dichiarazioni ... dopo tutto non usiamo solo le funzioni? Non possiamo semplicemente avere funzioni?

"Orientato agli oggetti" rotola meglio dalla lingua ed è storicamente radicato.

L '"orientamento" viene perché non stiamo parlando di programmazione ma di design. Solo perché utilizziamo oggetti o utilizziamo funzioni o utilizziamo eventi non significa che la nostra metodologia di progettazione venga eseguita modellando tutti e tre. Specificando l'orientamento della metodologia di progettazione, aiuta a comunicare ai programmatori come dovrebbero interpretare ed estendere tale progettazione - in che modo il focus della modellazione colora l'implementazione.


Quindi sembra che tu stia dicendo che "orientato agli oggetti" è una sorta di dichiarazione politica con frase ridondante, proprio come "proattivo" ha essenzialmente lo stesso significato di "attivo", ha solo un prefisso ridondante allegato per rendere certo che l'ascoltatore non perde il significato.
Excrubulent

1
Penso che tu abbia davvero colpito quello: facciamo un design orientato agli oggetti, ed è per questo che i linguaggi sono orientati agli oggetti - per permetterci di esprimere questo design.
K.Steff

1
@Excrubulent No, l'aggiunta di "orientato" lo rende più specifico. "Orientato agli oggetti" significa che non stiamo discutendo di particolari sulla programmazione di oggetti, ma piuttosto su come progettare programmi in modo che utilizzino gli oggetti in modo significativo. "Programmazione di oggetti", "programmazione di funzioni" o "programmazione di dichiarazioni" si riferirebbe in particolare a parlare dell'implementazione di questi concetti specifici anziché dei principi di progettazione. "Funzionale" e "dichiarativo" sono parole con suffissi che tentano di trasmettere lo stesso significato, ma per oggetti "oggettivi" o "oggettivi" non avrebbe molto senso.
Ilari Kajaste,

E come Michael Borgwardt ha risposto , la parola "orientata" non è in alcun modo speciale. Potrebbe anche essere "guidato" o "basato". Il punto importante è che non potrebbe essere la "programmazione di oggetti". (Beh, il laguange è sempre fluido, quindi potrebbe , ma non sarebbe altrettanto descrittivo.)
Ilari Kajaste

Ho cambiato risposta perché la risposta di Michael Borgwardt in realtà spiega il significato della parola e come modifica la frase.
Excrubulent,

2

Chiamarlo che aiuta a spiegare che gli oggetti sono una parte molto importante del paradigma.

La programmazione orientata agli oggetti ha le sue radici in Simula , che era essenzialmente ALGOL e alcune nuove funzionalità di programmazione degli oggetti. E in linea con quella storia, anche oggi è del tutto possibile in molte lingue (anche i "linguaggi OO puri") codificare qualcosa che è essenzialmente solo un programma procedurale con alcuni oggetti al suo interno. Ma questo è considerato un cattivo stile dagli sviluppatori più esperti.

In realtà fare qualcosa "il modo orientato agli oggetti" è molto diverso dal "modo procedurale". Il concetto più importante è l'uso dell'ereditarietà e del polimorfismo. Quando comprendi e interiorizzi veramente il modo in cui funzionano le classi e i metodi virtuali, è un'esperienza che apre gli occhi che cambia il modo in cui scrivi il codice in molti casi, un vero cambio di paradigma. (Supponendo, ovviamente, che tu abbia iniziato a scrivere prima il codice procedurale. Molti studenti oggigiorno vanno direttamente a Java o C # come prima lingua, e IMO si perdono nel capire davvero i benefici di OO facendo così.)

La chiamiamo programmazione orientata agli oggetti perché un programma scritto in stile OO non contiene solo oggetti; la struttura dell'intero programma si basa su di essi e sul loro modo di lavorare.


Questa è una risposta simile a quella di Telastyn, tranne per il fatto che sembra implicare che la "programmazione orientata agli oggetti" come termine sia in realtà fondamentalmente diversa dalla "programmazione degli oggetti". Puoi spiegare come potrebbero essere diversi? Voglio dire, mi sembra che OOP sia un termine abbastanza lento che OP avrebbe anche la stessa funzione.
Excrubulent

2
Molti studenti in questi giorni passano direttamente a Java o C # come prima lingua, e IMO si perdono nel capire davvero i vantaggi di OO in questo modo. - In realtà, ho iniziato con C ++ e nel mio primo incarico ho usato un mix di oggetti e funzioni, ma sono stato contrassegnato per il mio uso delle funzioni. Alcune di queste funzioni erano puramente funzionali e non beneficiarono affatto dell'incapsulamento in un oggetto, ma altre che utilizzavano i puntatori alle variabili per funzionare (ad esempio: informazioni sullo stato modificato), diventarono molto più facili da creare e chiamare una volta che lo erano in un oggetto, quindi ne ho visto entrambi i lati.
Excrubulent
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.