2010-07-28 16 views
6

C# Supporta 4 caratteristiche di base di linguaggi orientati agli oggetti:C# è un linguaggio di programmazione orientato agli oggetti al 100%?

  1. Astrazione
  2. incapsulamento
  3. polimorfismo
  4. Inheritance

posso dire C# è un linguaggio di programmazione completamente orientato agli oggetti? Perché?

+14

Si può dire. Non significa niente in inglese. –

+0

Vuoi dire che C# _ ** è ** _ 100% linguaggio di programmazione orientato agli oggetti? È questa la domanda? –

+0

Ho regolato l'inglese. –

risposta

20

Essa dipende dalla vostra definizione di "Object Oriented Programming Language".
Utilizzando la vostra definizione, sì C# soddisfa il 100% dei requisiti:

  1. Astrazione
  2. incapsulamento
  3. polimorfismo
  4. Inheritance

Tuttavia, C# contiene funzionalità che non sono strettamente "Object Oriented" come

  • Enums
  • tipi di valore
  • metodi statici
  • classi statiche

Quindi direi che, indipendentemente dalla definizione che si desidera utilizzare, C# non è un puro Linguaggio di programmazione orientato agli oggetti.

+0

Allora qual è la definizione attuale di linguaggio di programmazione orientato agli oggetti? – chanchal1987

+3

Se solo sapessi cosa intendeva per astrazione. –

+0

@Steven - Chi lo sa. Poiché C# ha classi astratte e consente di scrivere "astrazioni" (come qualsiasi linguaggio di programmazione), allora dirò che soddisfa questo requisito vago. – Greg

0

Alcuni puristi insistono sul fatto che C# non è completamente orientato agli oggetti perché manca di ereditarietà multipla.

+1

Quali lingue là fuori consentono l'ereditarietà multipla e come aggirare il problema dei diamanti? –

+0

La mancanza dell'eredità multipla non squalifica C# come Oriented Oriented È solo una funzionalità aggiuntiva di altri linguaggi come C –

+0

Carlos: Non sono sicuro che non sia d'accordo con te. Solo dicendo che la vista * purist * richiede un'eredità multipla, che sta riportando un fatto. –

3

Nessuno sa cosa significa "100% orientato agli oggetti". Probabilmente C# non è perché non tutto è un oggetto.

Alcune cose che non sono oggetti:

  1. blocchi di codice. È vero, puoi avere un oggetto come un Func che è un blocco di codice. Ma in alcune lingue, tutto il codice è in realtà degli oggetti.
  2. primitivi (int, float, double, insomma, etc.)
  3. funzioni
+2

Cosa * non * è un oggetto? –

+1

@ Sudat Sud: i puntatori non gestiti non sono oggetto. – ShdNx

+0

@ShdNx: Ma dovremmo considerare il codice non gestito come una vera parte di C#, o solo un'estensione per rendere C# interoperabile con sistemi esterni (possibilmente non orientati agli oggetti)? –

2

Un sacco di funzioni rendono C# non totalmente orientato agli oggetti. Tuttavia non credo che nessun linguaggio sia al 100% "orientato agli oggetti" e (quasi?) Tutte le lingue siano almeno un po 'multi-paradigma. Ad esempio, delegati. A very biased source sottolinea che i delegati, un costrutto in C# che amo, non è un "cittadino di prima classe" tra gli oggetti. Java non supporta l'ereditarietà multipla ma credo che sia il linguaggio più orientato agli oggetti che esiste. C++ non è chiaramente orientato agli oggetti al 100%, poiché un programma C++ basato su funzioni al 100% può essere facilmente scritto (basta compilare quasi tutti i programmi C).
Dipende più dall'uso della lingua che dalla lingua stessa. È orientato allo verso oggetti ma non esclusivamente composto da oggetti, proprio come gli altri linguaggi. Rispondere a questa domanda aiuterà chiunque a scrivere codice significativamente migliore? Personalmente non la penso così - ha detto Richard Feynman "Ho imparato molto presto la differenza tra conoscere il nome di qualcosa e sapere qualcosa". Non importa se può essere chiamato "object oriented" come qualsiasi cosa, da Perl a Python a CIL ad Ada ha caratteristiche orientate agli oggetti, e C# ha caratteristiche che non sono orientate agli oggetti.

+0

Penso che Ruby sia più orientato agli oggetti di Java .... – tster

+0

non è un linguaggio OO Scala puro? –

0

Sì, si può dire che C# è un linguaggio completamente orientato agli oggetti. Pensateci in questo modo, non solo supporta i quattro criteri di OOP, richiede anche che essenzialmente tutti i vostri costrutti siano incapsulati in oggetti (enumerazioni o tipi di valori che non sono OOP puri non mi influenzerebbero come un'eccezione particolarmente importante) . Cioè, C# non ti consente di sviluppare della metodologia OOP in in modo significativo in qualsiasi modo . Dove le persone a volte dicono che una lingua non è vera OOP è dove l'orientamento degli oggetti è opzionale - come C++ dove puoi sviluppare in C pura se lo desideri.

Una nota: Steven sottolinea che non supporta l'ereditarietà multipla. Tuttavia, questo non lo squalifica: l'OOP non dipende dall'inclusione di questa caratteristica (e l'esperienza ci ha insegnato che è, nel migliore dei casi, una benedizione mista). Sarebbe come dire che una macchina non è una "macchina" a meno che non abbia una fotocamera di riserva visto che alcune macchine li hanno.

Problemi correlati