2009-10-28 12 views
9

Czytałem o małej rozmowie całkowicie zorientowanej obiektowo .. czy C++ jest również całkowicie obiektowo zorientowany? jeśli nie ... to dlaczego tak?Czy język C++ jest całkowicie obiektowy?

+0

"Mała rozmowa jest całkowicie obiektowa", skąd to przeczytałeś? Po prostu ciekawy. –

+0

Co to znaczy "całkowicie"? –

+0

A co z Ruby? – ukanth

Odpowiedz

27

Nie, nie jest. Możesz napisać poprawny, dobrze zakodowany, doskonale zaprojektowany program w C++ bez użycia obiektu nawet raz.

C++ obsługuje programowanie obiektowe, ale OO nie jest nierozerwalnie związane z językiem. W rzeczywistości główna funkcja nie jest elementem obiektu.

W smalltalk lub Java nie można związać butów (lub napisać "Hello, world") bez co najmniej jednej klasy.

(Oczywiście, można się spierać o Java będąc całkowicie obiektowy język też, bo jego prymitywy (powiedzmy, int) nie są obiektami.)

+0

Posiada nawet narzędzia, które sprawiają, że jest to ogólny język programowania np. Szablony. Ale widziałem wiele szkolnych podręczników, które kojarzą C++ jako obiektowy język zorientowany. Problem polega na tym, kiedy autorzy tak robią, czytelnicy (głównie studenci) dogodnie zapominają, że C++ pasuje również do wielu typów języków programowania. – sjsam

1

Definiowanie OOL. Jeśli masz na myśli używanie klas itp., C++ obsługuje między innymi styl programowania OO. Nic nie powstrzyma cię przed używaniem klas. Java OTOH, nie pozwala na, ale klasy. (Tak, wiem, że Java obsługuje FP.)

+1

"Tak, wiem, że Java obsługuje FP.". To dla mnie nowe. Czy masz jakiś przykład FP w Javie? –

+0

Proste wyszukiwanie przynosi mi sporo artykułów. Jeden taki: dirkgently

+0

dirk. Myślę, że możesz oznaczać, że Java obsługuje ** proceduralne ** programowanie? Ne? –

3

C++ zawiera dialekt "C" jako podzbiór, umożliwiający czysto proceduralny styl kodu.

0

C++ nie jest czystym obiektowy język, a jako już wspomniane nic nie zmusza Cię do używania koncepcji OOP w C++. C++ to język hybrydowy, który jest oparty na języku C, który jest wyłącznie językiem proceduralnym.

Przykładami języków czysto obiektowych są C# i JAVA.

+1

Żadne z nich nie jest tak proste, jak typy danych nie stosują tej samej semantyki, co typ zdefiniowane przez użytkownika. Operacje na nich nie są zdefiniowane pod względem przekazywania komunikatów i nie można ich przeciążyć ani przedefiniować w klasie pochodnej. – Omnifarious

+0

Myślę, że skomentowałeś niewłaściwy wpis. ;) –

+1

Nie, Omni mówi, że ani C#, ani Java nie są czystymi obiektami OO, ponieważ mają takie rzeczy jak int i long, które są * nie * obiektami. – paxdiablo

0

Nie, to nie jest język czysto obiektowy. W szczególności prymitywne typy danych w C++ mają reguły, które często różnią się od typów danych, które nie są prymitywne. Dodatkowo możliwe jest posiadanie funkcji, które nie są w ogóle związane z żadnym typem danych. Istnieje wiele innych sposobów, w których C++ nie jest językiem czysto obiektowym, ale są to dwa z największych powodów.

Ani Javy, ani C# nie są językami czysto obiektowymi, ponieważ mają one pierwotne typy danych, które nie przestrzegają tej samej semantyki co typy danych "obiektowe".

1

Krótka odpowiedź brzmi: nie - C++ nie jest w pełni językiem OO. Możesz napisać "nie do końca" OOP używając C++ nawet bez uciekania się do korzystania z podzbioru C. Jednym z takich przykładów jest twoja główna metoda - która nie jest zawarta w żadnej klasie.

Głównym powodem jest fakt, że C++ pochodzi z C - kiedy Stroustrup stworzył język, do którego zamierzał stworzyć nową wersję C (z klasami). w rzeczywistości próbował przedstawić swoje dzieło jako nowy smak C (C84).

1

Wielkim argumentów ludzie mają wobec deklarując C++ jako „czysty” OO jest to, że wciąż wymaga co najmniej jeden non-oo bit, main(), i że nie wszystko jest obiektem (int, long et al).

Ujawnia także stan obiektu do manipulacji bez użycia paradygmatu przekazywania komunikatów (członkowie publiczni). To przerywa enkapsulację obiektów.

Z drugiej strony Java ma main() jako statyczną metodę klasy, więc jest bliżej, ale nadal zawiera rzeczy nieobiektowe.

Smalltalk to lingua franca normalnie trzymany jako najczystszy z czystych, ale nie wiem wystarczająco dużo o tym, aby komentować.

Me, I mają tendencję do opuszczenia tych rodzaju argumentów dla inteligencji, a ja dostać się na opracowywaniu i dostarczaniu kod do moich klientów :-)

+0

Naprawdę nie potrzebujesz głównego. Jest to tylko dobrze znany punkt wejścia, więc linia poleceń i (niektóre) GUI nie mają gdzie przekazać kontrolę po obciążeniu. –

+0

Ty * potrzebujesz * głównego, jest to wymagane przez standard. – paxdiablo

0

oczywiście nie !! Obsługuje wewnętrzne typy danych.

0

C++ to nic innego jak "C z klasami". Wciąż mogę napisać program C i zapisać go jako plik .cpp. Dowód implikacji mówi, że "C++ nie jest językiem wyłącznie obiektowym".

Powiązane problemy