2009-10-28 6 views
9

Я читал о маленьком разговоре, полностью объектно ориентированном .. является C++ также полностью объектно-ориентированным? если нет .. то почему так ???Является ли C++ полностью объектно-ориентированным языком?

+0

«Маленькая беседа полностью объектно ориентирована», откуда вы ее прочитали? Просто любопытно. –

+0

Что это значит «полностью»? –

+0

Что относительно Руби? – ukanth

ответ

27

Нет, это не так. Вы можете написать действительную, хорошо закодированную, отлично написанную C++-программу без использования объекта даже один раз.

C++ поддерживает объектно-ориентированное программирование, но OO не является неотъемлемой частью языка. Фактически, основная функция не является членом объекта.

В smalltalk или Java вы не можете привязать обувь (или написать «Hello, world») без хотя бы одного класса.

(Конечно, можно спорить о том Java является полностью объектно-ориентированный язык тоже, потому что его примитивов (например, целое) не являются объектами.)

+0

У него даже есть утилиты, которые делают его общим языком программирования например Шаблоны. Но я видел много школьных учебников, которые связывают C++ как объектно-ориентированный язык. Проблема заключается в том, когда авторы делают это, читатели (в основном студенты) легко забывают, что C++ также подходит для многих типов языков программирования. – sjsam

1

Определить OOL. Если вы имеете в виду использование классов и т. Д., То C++ поддерживает OO-стиль программирования среди других. Нет ничего, что помешало бы вам не использовать классы. Java OTOH, не допускает, кроме классов. (Да, я знаю, что Java поддерживает FP.)

+1

«Да, я знаю, что Java поддерживает FP.». Это ново для меня. Есть ли у вас пример FP на Java? –

+0

Простой поиск дает мне немало статей. Один такой: dirkgently

+0

дирк. Я думаю, вы можете сказать, что Java поддерживает ** процедурное ** программирование? Ne? –

3

C++ содержит диалоги 'C' как подмножество, допускающее чисто процедурный стиль кода.

0

C++ не является чисто объектно-ориентированный язык, и, как уже упомянутое ничего не заставляет вас использовать концепции ООП на C++. C++ - это то, что вы называете гибридным объектно-ориентированным языком, поскольку оно основано на C, которое является чисто процедурным языком.

Примерами чистых объектно-ориентированных языков являются C# и JAVA.

+1

Ни один из них не является примитивным типом данных, не подчиняется той же семантике, что и пользовательские типы данных. Операции с ними не определяются с точки зрения передачи сообщений, и они не могут быть перегружены или переопределены в производном классе. – Omnifarious

+0

Я думаю, что вы прокомментировали неправильный пост. ;) –

+1

Нет, Omni говорит, что ни C#, ни Java не являются чистыми OO, поскольку у них есть такие вещи, как int и long, которые являются объектами * not *. – paxdiablo

0

Нет, это не чисто объектно-ориентированный язык. В частности, примитивные типы данных в C++ имеют правила, которые часто отличаются от типов данных, которые не являются примитивными. Кроме того, возможно иметь функции, которые вообще не связаны с каким-либо типом данных. Существует множество других способов, в которых C++ не является чисто объектно-ориентированным языком, но это две из самых больших причин.

Ни Java, ни C# не являются чисто объектно-ориентированными языками либо потому, что у них есть примитивные типы данных, которые не подчиняются той же семантике, что и типы данных «object».

1

Короткий ответ: нет - C++ не является полностью языком OO. Вы можете написать «не совсем» ООП, используя C++, даже не прибегая к использованию подмножества C. Одним из таких примеров является ваш основной метод, который не содержится ни в одном классе.

Основная причина заключается в том, что C++ возник из C - когда Stroustrup создал язык, на который он стремился создать новую версию C (с классами). на самом деле он попытался представить свое творение как новый аромат C (C84).

1

БОЛЬШОМ аргументы люди имеют против объявления C++, как «чистый» OO является то, что она по-прежнему требует, по крайней мере один не-OO немного, main(), и что не все является объектом (int, long и др).

Он также предоставляет состояние объекта для манипуляций без использования парадигмы передачи сообщений (публичные элементы). Это нарушает инкапсуляцию объектов.

Java, с другой стороны, имеет main() как статичный метод класса, поэтому он ближе, но в нем все еще есть не объекты.

Smalltalk - это lingua franca, обычно поддерживаемый как чистый из чистого, но я не знаю достаточно об этом, чтобы комментировать.

Me, я склонен оставить эти роды аргументы для интеллигенции в то время как я ладить с разработкой коды и доставки своих клиентов :-)

+0

На самом деле не нужен главный. Его просто хорошо известная точка входа, поэтому командная строка и (некоторые) графические интерфейсы не позволяют передать управление после загрузки. –

+0

Вы * делаете * нужен главный, это предусмотрено стандартом. – paxdiablo

0

конечно нет !! Он поддерживает встроенные типы данных.

0

C++ - это не что иное, как «C с классами». Я все еще могу написать программу на C и сохранить ее как .cpp-файл. Итак, доказательство подразумевает, что «C++ не является чисто объектно-ориентированным языком».

Смежные вопросы