2009-10-28 14 views
9

Ho letto che le chiacchiere sono completamente orientate agli oggetti. C++ è anche completamente orientato agli oggetti? se no .. allora perché così ??Il linguaggio C++ è completamente orientato agli oggetti?

+0

"le chiacchiere sono completamente orientate agli oggetti", da dove hai letto questo? Solo curioso. –

+0

Che cosa significa "completamente"? –

+0

E Ruby? – ukanth

risposta

27

No, non lo è. È possibile scrivere un programma C++ valido, ben codificato e ottimamente disegnato senza utilizzare un oggetto neanche una volta.

C++ supporta la programmazione orientata agli oggetti, ma OO non è intrinseco al linguaggio. In effetti, la funzione principale non è un membro di un oggetto.

In smalltalk o Java, non è possibile legare le scarpe (o scrivere "Hello, world") senza almeno una classe.

(Naturalmente, si può discutere su Java di essere un linguaggio completamente orientato agli oggetti troppo, perché le sue primitive (diciamo, int) non sono oggetti.)

+0

Ha persino utilità che lo rendono un linguaggio di programmazione generico ad es. Modelli. Ma ho visto molti libri di testo a livello di scuola che associano C++ come linguaggio orientato agli oggetti. Il problema è quando gli autori lo fanno, i lettori (principalmente studenti) dimenticano convenientemente che il C++ si adatta anche a molti tipi di linguaggi di programmazione. – sjsam

1

Definire OOL. Se intendi usare le classi ecc, allora C++ supporta la programmazione OO in altri. Non c'è niente che ti impedisca di non usare le lezioni. Java OTOH, non consente solo le classi. (Sì, so che Java supporta FP.)

+1

"Sì, so che Java supporta FP.". Questo è nuovo per me. Hai qualche esempio di FP in Java? –

+0

Una semplice ricerca mi dà parecchi articoli. Uno di questi: dirkgently

+0

dirk. Penso che potresti voler dire che Java supporta la programmazione ** procedurale **? Ne? –

3

C++ contiene un dialetto "C" come sottoinsieme, che consente uno stile di codice puramente procedurale.

0

C++ non è un oggetto orientato linguaggio puro, e come già menzionato nulla ti costringe a usare i concetti OOP in C++. Il C++ è quello che tu chiami un linguaggio ibrido orientato agli oggetti, poiché è basato su C che è puramente un linguaggio procedurale.

Esempi di linguaggi orientati agli oggetti puri sono C# e JAVA.

+1

Nessun di questi tipi di dati primitivi non obbedisce alla stessa semantica dei tipi di dati definiti dall'utente. Le operazioni su di esse non sono definite in termini di messaggi di passaggio e non possono essere sovraccaricate o ridefinite in una classe derivata. – Omnifarious

+0

Penso che abbiate commentato il post sbagliato. ;) –

+1

No, Omni sta dicendo che né C# né Java sono OO puri poiché hanno cose come int e long che sono * non * oggetti. – paxdiablo

0

No, non è un linguaggio puramente orientato agli oggetti. In particolare, i tipi di dati primitivi in ​​C++ hanno regole che sono spesso diverse da tipi di dati che non sono primitivi. Inoltre è possibile avere funzioni che non sono associate a nessun tipo di dati. Ci sono una miriade di altri modi in cui il C++ non è un puro linguaggio orientato agli oggetti, ma questi sono due dei maggiori motivi.

Né Java né C# sono linguaggi orientati agli oggetti puri o perché hanno tipi di dati primitivi che non obbediscono alla stessa semantica dei tipi di dati 'oggetto'.

1

La risposta breve è no - Il C++ non è interamente linguaggio OO. Puoi scrivere "non esattamente" OOP usando C++ anche senza ricorrere all'utilizzo del sottoinsieme C. Uno di questi esempi è il tuo metodo principale, che non è contenuto in nessuna classe.

Il motivo principale è il fatto che C++ ha avuto origine da C - quando Stroustrup ha creato il linguaggio che intendeva creare una nuova versione di C (con classi). infatti ha cercato di presentare la sua creazione come il nuovo sapore di C (C84).

1

Le grandi argomenti le persone hanno nei confronti dichiarando C++ come "pura" OO è che richiede ancora almeno un non OO bit, main(), e che non tutto è un oggetto (int, long et al).

Espone anche lo stato di un oggetto per la manipolazione senza utilizzare il paradigma di passaggio dei messaggi (membri pubblici). Questo rompe l'incapsulamento degli oggetti.

Java, d'altra parte, ha main() come solo un metodo statico di una classe, quindi è più vicino ma contiene ancora oggetti non oggetti.

Smalltalk è la lingua franca normalmente considerata il più puro dei puri, ma non ne so abbastanza per commentare.

Io, tendono a lasciare quel tipo di argomenti per l'intellighenzia, mentre mi trovo con lo sviluppo di codice e fornire ai miei clienti :-)

+0

In realtà non ha bisogno di main. È solo un noto punto di ingresso, quindi la riga di comando e (alcune) GUI non sono dove passare il controllo dopo il caricamento. –

+0

Si * ha * bisogno di main, è richiesto dallo standard. – paxdiablo

0

certo che no !! Supporta tipi di dati intrinseci.

0

C++ non è altro che "C con classi". Posso ancora scrivere un programma in C e salvarlo come file .cpp. Quindi, la prova implicita dice "C++ non è un linguaggio puramente orientato agli oggetti".

Problemi correlati