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?
Odpowiedz
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.)
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
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.)
"Tak, wiem, że Java obsługuje FP.". To dla mnie nowe. Czy masz jakiś przykład FP w Javie? –
Proste wyszukiwanie przynosi mi sporo artykułów. Jeden taki:
dirk. Myślę, że możesz oznaczać, że Java obsługuje ** proceduralne ** programowanie? Ne? –
C++ zawiera dialekt "C" jako podzbiór, umożliwiający czysto proceduralny styl kodu.
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.
Ż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
Myślę, że skomentowałeś niewłaściwy wpis. ;) –
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
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".
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).
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 :-)
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. –
Ty * potrzebujesz * głównego, jest to wymagane przez standard. – paxdiablo
oczywiście nie !! Obsługuje wewnętrzne typy danych.
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".
- 1. Całkowicie zmień język IDE w Netbeans 6.8
- 2. Jaki jest obiektowy odpowiednik _.pluck
- 3. Czy można całkowicie wyłączyć domyślnego operatora C++?
- 4. Czy środowisko ASP.NET obsługuje język C++?
- 5. Roslyn rzuca Język "C#" nie jest obsługiwany
- 6. Czy możliwy jest całkowicie statyczny UICollectionView?
- 7. Sprawdzanie, czy plik jest całkowicie zapisany.
- 8. Określanie, czy formularz jest całkowicie poza ekranem
- 9. Czy język programowania C ma środowisko uruchomieniowe?
- 10. Język skryptowy dla C/C++?
- 11. Dlaczego Python nie jest w pełni obiektowy?
- 12. Język kompilacji do C
- 13. Język C: znaczenie operatora "#"?
- 14. Czy język vala to krzyżowy?
- 15. język bez, jeśli jest?
- 16. Plik obiektowy na kod binarny
- 17. Czy możliwe jest wyczyszczenie całkowicie pozycjonowanych elementów za pomocą CSS?
- 18. Język programowania do tworzenia DLL: C++ lub C#
- 19. Jak ustalić, czy język jest rekurencyjny czy rekursywnie przeliczalny?
- 20. Język C/C kod ++ na platformie Android
- 21. kiedy jest całkowicie załadowany highchart?
- 22. Czy można całkowicie ignorować argumenty variadyczne dla funkcji C?
- 23. c język if z sizeof
- 24. Czy C# w języku angielskim jest uniwersalne?
- 25. Klient BitTorrent całkowicie napisany w C#?
- 26. Czy typelists zostały całkowicie zastąpione szablonami variadic?
- 27. Co to jest publiczny moduł obiektowy w języku VBA?
- 28. Co to jest język kleju?
- 29. Czy domena bezpieczna (HTTPS) jest całkowicie niezbędna do logowania?
- 30. Czy korzystanie z geofencing jest całkowicie nieopłacalne w systemie Android?
"Mała rozmowa jest całkowicie obiektowa", skąd to przeczytałeś? Po prostu ciekawy. –
Co to znaczy "całkowicie"? –
A co z Ruby? – ukanth