Non riesco a pensare a un posto migliore tra i fratelli SO per porre una domanda del genere. Inizialmente volevo chiedere "Python è un linguaggio OO puro?" ma considerando i problemi e una sorta di disagio che le persone sperimentano mentre provano a definire il termine, ho deciso di iniziare con l'ottenere una definizione chiara per il termine stesso.
Sarebbe piuttosto giusto iniziare con la corrispondenza del Dr. Alan Kay, che ha coniato il termine (notare l'ispirazione nell'analogia biologica con le cellule o altri oggetti viventi).
Esistono i seguenti modi per affrontare l'attività:
- Fornisci un'analisi comparativa elencando i linguaggi di programmazione che possono mostrare (o non riuscire a farlo) determinate proprietà uniche e sufficienti per definire il termine (sebbene Smalltalk, Scala,
Javae così via) siano possibili esempi ma IMO in questo modo sembra né realmente completo né fruttuoso ) - Fornisci una definizione formale (o vicino ad essa, ad esempio in uno stile più accademico o matematico).
- Fornisci una definizione filosofica che si baserebbe totalmente sul contesto semantico del linguaggio concreto o sull'esperienza di programmazione a priori (ci deve essere qualche possibilità di spiegazione riuscita da parte della comunità).
La mia versione attuale: "Se un certo linguaggio di programmazione ( formale ) che può ( grammaticalmente ) distinguere tra operazioni e operandi, nonché inferire sul tipo di ciascun operando se questo tipo è un oggetto (nel senso di OOP) o no, allora chiamiamo una tale lingua una lingua OO fintanto che esiste almeno un tipo in questa lingua che è un oggetto. Infine, se tutti i tipi di lingua sono anche oggetti, definiamo tale linguaggio come linguaggio OO puro (forte) ".
Gradirei ogni possibile miglioramento. Come puoi vedere, ho appena reso la definizione dipendente dal termine "oggetto" (spesso definito come classe di oggetti).
[MODIFICARE]
Inoltre, io uso (per fortuna ben compreso) la nozione di un tipo come nelle lingue tipizzate. La programmazione dei tipi di dati o la programmazione orientata ai tipi non è solo un'interpretazione sintattica (del testo del programma, ovvero come trattare determinati valori letterali e variabili di dati - qualcosa che si evolve in sicurezza dei tipi) ma può essere attribuita alla grammatica del linguaggio e studiata in modo formale (usando la logica matematica) come i cosiddetti sistemi di tipo . Si noti che richiedere un particolare sistema di tipi per avere un cosiddetto tipo universale è uno dei modi per definire la purezza del linguaggio OO (ci sono modi per espanderlo semanticamente).
NB
come rispondere :
- aiuta se specifichi un libro o un riferimento che supporti / spieghi la tua comprensione della terminologia e dei concetti (di solito una buona definizione copre o fa riferimento a tutti i concetti dipendenti eccetto quelli elementari).
- se possibile, indicare una categoria rientrata della risposta / definizione se non è chiaro diversamente (vedi sopra: 1 - per esempio di linguaggio, 2 - logica matematica, 3 - descrizione tecnica e filosofia di programmazione)
- la classificazione è importante (e anche perché il termine OO puro è incluso nel termine OO) mentre si risponde al tentativo di mescolare elementi del paradigma OO da altre metodologie ben note (e non confonderli / sovrapporli in alcun modo, ad es. in genere è possibile coprire elementi di programmazione modulare / incarnato con la programmazione OO): provare a distinguere OOP da (incluso o essere parte di) Programmazione funzionale, Programmazione logica (specialmente fortemente specializzata), Tipi di dati Abstarct (ADT), Modulare, Metaprogrammazione (generici e tempo di macroespansione di LISP), Contratti (ad es. Eiffel), Aspect-oriented (AO), (la differenza tra la classificazione dichiarativa e funzionale e le definizioni storiche della struttura strutturata di Dijkstra sono chiare)
sulla difficoltà di dare una definizione formale : abbastanza sorprendentemente è molto facile dare una descrizione matematica di OOP in forma di un certo sistema logico (formale) (molto probabilmente basato sul tipo) e definire un concetto dopo l'altro. Si può anche cercare di fare qualcosa di più pratico per l'applicazione di tale formalismo per il controllo di sicurezza di tipo o nuovi aspetti progettuali lingua che meramente astratto divertimento o esercizio fisico (anche la formulazione di ricerca di programmazione orientata agli oggetti in intuizionistica Tipo Theory , tipi dipendenti , in modo indipendente, in formalismi FOL come lambda calcolo e semplicemente usando la teoria delle categorie). Un punto principale qui è che non sorprendetali formulazioni IMO sono fortemente distorte (imperfette) dalla molto probabilmente inizialmente incompleta comprensione di OOP (in ingegneria informatica) e finiscono per essere quasi inaccessibili in seguito (contribuendo così a malapena al mondo della programmazione - forse tranne che una certa percentuale trova applicazioni indietro dal mondo formale essendo integrato nelle lingue popolari ).
Quindi sì, è difficile dare esattamente una "buona" definizione, non solo una definizione. Ma sono sicuro di averlo chiesto qui a causa della tua esperienza e coinvolgimento diretto, ragazzi.