LINUX.ORG.RU

Ответ на: комментарий от Deleted

я же не говорю про парадигму языка. я говорю именно про стиль

heaven__12
()
Ответ на: комментарий от heaven__12

структура - это класс, все члены которого общие. (Бьерн Страуструп - Язык программирования С++)

слишком толсто

Debasher ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

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

heaven__12
()
Ответ на: комментарий от heaven__12

структура - это класс, Бьерн Страуструп

Скорее наоборот (класс появился позднее структуры) — класс, это структура.

deep-purple ★★★★★
()
Ответ на: комментарий от Debasher

т.е. obj.method() делает method(obj) ООП?

Страуструп неплохо об этом написал:

Объектно-ориентированное программирование - это метод программирования, способ написания «хороших» программ для множества задач. Если этот термин имеет какой-то смысл, то он должен подразумевать: такой язык программирования, который предоставляет хорошие возможности для объектно-ориентированного стиля программирования. Здесь следует указать на важные различия. Говорят, что язык поддерживает некоторый стиль программирования, если в нем есть такие возможности, которые делают программирование в этом стиле удобным (достаточно простым, надежным и эффективным). Язык не поддерживает некоторый стиль программирования, если требуются большие усилия или даже искусство, чтобы написать программу в этом стиле. Однако это не означает, что язык запрещает писать программы в этом стиле. Действительно, можно писать структурные программы на Фортране и объектно-ориентированные программы на С, но это будет пустой тратой сил, поскольку данные языки не поддерживают указанных стилей программирования.

Фраза `способ написания «хороших» программ` звучит немного глупо, но книга, из которой выдран этот абзац, была издана в 1986 году, поэтому можно просто не заострять внимание на этом моменте. А в остальном со всем согласен. Рекомендую прочитать продолжение этого текста тем, кто не читал книгу «Язык программирования С++» (глава 1.2 Парадигмы программирования).

Nietzsche
()
Ответ на: комментарий от Gvidon

в С тоже есть инкапсуляция, но он — не ООП язык. в JavaScript нет наследования, но JavaScript — ООП язык. как же так?

anonymous
()
Ответ на: комментарий от anonymous

Есть ѣООП, есть !ѣООП. ѣООП это io, self, smalltalk и еще язык великага царя ѣООП анонiмуса.

Все остальное !ѣООП и не рекомендуется к употреблению никому, кто не считает себя приматом.

Примат, хочешь выпендриться — изучи матчасть, иначе весь эффект насмарку. Ять и ер буквы разные. И десятеричное пишется перед гласными.

anonymous
()

Я бы сказал так: ключевым отличием ООП является возможность создавать пользовательские типы на основе других типов таким образом, что функция, правильно работающая с объектами, принадлежащими к родительскому типу гарантированно продолжит правильно работать также и с объектами дочернего типа.

anonymous
()
Ответ на: комментарий от deep-purple

Я всегда знаю, где у меня объект, а где вычисление. Возможно я слишком примитивен.

Этот тред от непонимания, где у ОПа объект, а где вычисление.

arturpub ★★
()
Ответ на: комментарий от anonymous

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

Это называется subtyping, и к ООП это имеет довольно посредственное отношение.

hateyoufeel ★★★★★
()
Ответ на: комментарий от arturpub

И мы снова возвращаемся к вопросу, что, если объект это нечно абстрактное, а не конкретно синтаксическое, то что такое ООП?

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Думаю, что это определение структуры автором было выбрано не спроста. Очевидно, что таким образом оно становится кратким и доходчивым. Не важно кто после кого появился. Да, структура это класс, а класс это структура. Просто есть доп. условия.

heaven__12
()

Лучше всех ООП - ООП делает толстый кореец Psy.

thesis ★★★★★
()
Ответ на: не сложно от Debasher

In object-oriented programming, a class is an extensible program-code-template for creating objects. Тыкаем на objects. An object can be a variable, a data structure, or a function

heaven__12
()

Отношусь к ООП, как к методу проектирования (ага, вот эти квадратики от руки на бумажке и стрелочки между ними). ООП код - код, оперирующий абстракциями, описанными в проекте. ООП язык - язык, в который заложены наиболее часто используемые абстракции на уровне синтаксиса. Не дрочу на Ъ-реализации ООП, может быть они и правильные с академической точки зрения, но когда прочитал у кого-то (Брукс?) как индустрия докатилась до ООП, то забил на Ъ.

winlook38 ★★
()

Внимание!

жООПа - ненадо!

anonymous
()
Ответ на: комментарий от heaven__12

Важно, что при этом класс не демонстрирует всем направо и налево, что у него есть переменная health.

И чем это важно?

pawnhearts ★★★★★
()
Ответ на: комментарий от templarrr

А ядро уже переписали на С++?

Использовать ООП на языке, в котором отсутствуют соответствующие синтаксические конструкции можно. Только читать такой ад удовольствия мало.

Pinkbyte ★★★★★
()
Ответ на: комментарий от heaven__12

не поленюсь процитировать: структура - это класс, все члены которого общие

А он тебе не поленится процитировать:

Птица — это петух, только без гребешка и не кукарекает ))

deep-purple ★★★★★
()
Ответ на: комментарий от hateyoufeel

Это называется subtyping

Нет, это называется лисков, запилено спецом для безмозглого быдла, и к ООП вообще, и к сабтайпингу в частности, не имеет никакого отношения.

anonymous
()
Ответ на: комментарий от heaven__12

Думаю, что это определение структуры автором было выбрано не спроста

Я прямо представляю себе как это было. Сидит страус, пишет свои писюльки, и думает, дай-ка я тут вот в этом месте на вентилятор наброшу.

deep-purple ★★★★★
()
Ответ на: комментарий от Debasher

Это значит, что к этим данным может напрямую обращаться кто угодно. В классе же немного по-другому: если эти данные помечены как не публичные, то кто угодно обратиться к ним не может. Есть, как вы сказали, «белый список», который возглавляет сам класс. Если углубляться, то этот список может быть расширен друзьями класса, наследниками класса в зависимости от уровня доступа. Для понимания снова приведу пример, что был выше. есть класс и структура: class ManClass{int health, Sex sex, kick()}, struct ManStruct {int health, Sex sex}. У каждого есть 2 переменные: здоровье и пол. Так же есть общедоступный (несокрытый от кого-либо) метод kick() у ManClass. Создадим 2 экземпляра: ManClass manC, ManStruct manS. Допустим, мы проинициализировали их здоровье значением 100. Теперь попробуем отнять у каждого из них по 10 здоровья. manS.health -= 10 выполнится в штатном режиме, а вот manС.health -= 10 вызовет ошибку компиляции: вы не имеете права из вне редактировать поля класса. В общем случае доступ к manС.health в данной ситуации можно осуществить через метод ManClass::kick. Метод принадлежит классу, значит он имеет доступ к ManClass::health. Значит в нём можно прописать health -= 10, а уже извне попросим manС.kick().

heaven__12
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.