Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/63: Рейтинг темы: голосов - 63, средняя оценка - 4.92
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63

Понимание основ ООП

27.04.2022, 16:33. Показов 16488. Ответов 188
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Начал изучать ООП и сразу возникло непонимание на изучении классов.

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

Соответственно, при создании объектов мне необходимо будет для каждого из них задавать свойство, допустим, «Температура» или языки ООП позволяют создать некое «глобальное, общее» свойство и при создании конкретного объекта я смогу присваивать ему это «глобальное» свойство, задавая лишь значение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2022, 16:33
Ответы с готовыми решениями:

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

Знание основ ООП/Джава
Здравствуйте. Хочу записаться на курсы по Java, но там требование: знание основ ООП/Java. Подскажите, что именно входить в знание основ...

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

188
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
10.05.2022, 22:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shamil1 Посмотреть сообщение
неполноценное "псевдо ООП", которое можно "дословно" перевести, например, на Си.
Если нечто выглядит как утка, плавает как утка, крякает как утка - это не утка, это псевдоутка.

https://www.amazon.com/Object-... B00930I6TK
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
10.05.2022, 22:39
Определение из википедии:
Объе́ктно-ориенти́рованное программи́рование (сокр. ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования[1].

Обратите внимание, что если классы не образуют иерархию, то это уже не ООП.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
10.05.2022, 22:50
Цитата Сообщение от Shamil1 Посмотреть сообщение
Это не моё личное мнение. Если Вы не назовёте все три характерные черты ООП, то Ваш ответ посчитают неправильным.
Принципы ООП - это не черты ООП. То есть я назову три принципа ООП, но для ОО-языка они останутся необязательными.

Добавлено через 9 минут
Из той же статьи Википедии про ООП:
Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.

Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм подтипов — возможность единообразно обрабатывать объекты с различной реализацией при условии наличия общего интерфейса.
И сразу заголовок:
Сложности определения
В конце
Определить ООП можно и многими другими способами.
Короче, автор статьи почитал корифеев компьютерной науки, не согласился с ними и выкатил свою верную точку зрения.)
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
10.05.2022, 23:04
Я определяю ооп так:
динамическая память + косвенная адресация.

Вот без этих двух вещей все будет ересью.

Добавлено через 1 минуту
Цитата Сообщение от Shamil1 Посмотреть сообщение
Определение из википедии:
А Вы не верьте википедии
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
11.05.2022, 00:26
Цитата Сообщение от Shamil1 Посмотреть сообщение
Определение из википедии:
Объе́ктно-ориенти́рованное программи́рование (сокр. ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования[1].
Странно - захожу на англоязычную версию википедии и там нет в определении ничего про классы и наследование.

Добавлено через 4 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
В примере используется только frm модуль. Раз нет cls модулей, то нет и ООП.
з.ы. Даже в cls модулях не ООП, а неполноценное "псевдо ООП", которое можно "дословно" перевести, например, на Си.
То есть VB не ООП язык?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 00:38
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Из той же статьи Википедии про ООП
Эта цитата подтверждает мои слова.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Сложности определения
Если Вы почитаете другие определения, которые приведены под данным подзаголовком, то увидите там ту же суть.

Например, в определении Алана Кэя:
Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
Без иерархии нет ООП. Именно в иерархии заключается суть парадигмы.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 00:51
Цитата Сообщение от Tavashi Посмотреть сообщение
Странно - захожу на англоязычную версию википедии и там нет в определении ничего про классы и наследование.
Не удивительно. Авторы статьи включили в список ОО языков даже те, которые не являются ОО, а лишь похожи:
Languages with abstract data type support which may be used to resemble OO programming, but without all features of object-orientation.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
11.05.2022, 01:06
Цитата Сообщение от Shamil1 Посмотреть сообщение
Не удивительно. Авторы статьи включили в список ОО языков даже те, которые не являются ОО, а лишь похожи:
Значит определение ООП зависит от авторов, не так ли? Как можно в таком случае говорить об общепринятом?
P.S. Какой чемпион мира по боксу считается "общепринятым"?
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
11.05.2022, 01:08
http://wiki.c2.com/?DefinitionsForOo Там можно выбрать определение по душе.

DCOM можно привести как пример словарной ОО модели. Каждый объект определяет число и типы своих методов.
Поэтому вместо "а, указатель на базовый класс! я могу рассчитывать на определенный набор методов!" там "вот там объект, у него есть названные методы некоторые из которых вам знакомы. Сами решайте, можете ли вы с ним работать".

Т.е. вам дали не объект широкого класса "чемодан" который вы научились, а нечто с ручкой и колесиками. Там может быть кнопочка "заведись и поедь", но если вы этого не ожидали, потащите в формате чемодана, за ручку.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
11.05.2022, 01:12
Цитата Сообщение от Tavashi Посмотреть сообщение
То есть VB не ООП язык?
Shamil1, и ответьте уже и на этот вопрос.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 01:21
Цитата Сообщение от vantfiles Посмотреть сообщение
Я определяю ооп так:
динамическая память + косвенная адресация.
Вот без этих двух вещей все будет ересью.
Давайте рассмотрим сначала языки со статической типизацией.

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

То же самое относится и к языкам со строгой динамической типизацией.

Что касается утиной типизации, то тут наличие ООП определяется тем, как думает автор кода.

Можно все объекты считать словарями, содержащие пары (имя, значение/функция). Тогда можно запихать в один список разнородные объекты (а по сути одинаковые - объекты типа "словарь") и во время исполнения надеятся, что в словаре найдётся пара с нужным ключом. Это не ООП подход.

Можно все объекты в разнородном списке создать от одного прототипа (прямо или косвенно), тем самым гарантировав наличие в каждом из них метода с нужным именем. Это ООП подход.

Можно считать, что все объекты с методом "абц" неявно реализуют соответствующий (неявный) интерфейс некого абстрактного типа данных. Тогда мы запихнули в список не разнородные объекты, а только те, которые этот интерфейс реализуют. Поддержка АТД в языке может быть реализована с помощью ОО подхода, как например в C# - наследованием от интерфейса. А, например, в Хаскеле поддержка АТД реализована через тайпклассы (не являются типом данных). То есть, использование АТД не делает Ваш код по сути объетно-ориентированным, но при этом в некоторых языках по форме он будет выглядеть, как объектно-ориентированный. Будет это ООП подходом или нет, зависит от того, ориентирутесь ли Вы на форму или на содержание (суть).
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 01:25
Цитата Сообщение от Tavashi Посмотреть сообщение
То есть VB не ООП язык?
Найдите ответ на этот вопрос самостоятельно, заглянув в статью а англоязычной википедии, на которую Вы ссылаетесь. Заодно определитесь, согласны ли Вы с тем, что там написано. Если согласны, то почему утверждаете противоположное. Если не согласны, то почему ссылаетесь на неё.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 01:31
Цитата Сообщение от Tavashi Посмотреть сообщение
Как можно в таком случае говорить об общепринятом?
Общепринятое - принятое большинством. При этом определения, отличающиеся по форме, могут не отличаться по сути. Например, в учебниках по мат.анализу Никольского и Кудрявцева некоторые вещи определялись по-разному (например, если я правильно помню, счётность множества) и соответствующие теоремы доказывались совершенно по-разному. Но суть была одна и та же.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
11.05.2022, 01:31
Цитата Сообщение от Shamil1 Посмотреть сообщение
Можно все объекты считать словарями, содержащие пары (имя, значение/функция). Тогда можно запихать в один список разнородные объекты (а по сути одинаковые - объекты типа "словарь") и во время исполнения надеятся, что в словаре найдётся пара с нужным ключом. Это не ООП подход.

Можно все объекты в разнородном списке создать от одного прототипа (прямо или косвенно), тем самым гарантировав наличие в каждом из них метода с нужным именем. Это ООП подход.
Тут лукавство. Словарные объекты позволяют отсеять объекты не имеющие заданного свойства.

Пример словарного подхода: написать функцию сортировки животных по размеру клюва.
Берутся все животные с методом/свойством "РазмерКлюва" и сортируются.

Пример наследования для такой же задачи: Взять базовый тип птица. Но выпал утконос. Надо писать особый случай.
И выпал кальмар. И осьминог. И ископаемые динозавры..
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 01:51
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Тут лукавство. Словарные объекты позволяют отсеять объекты не имеющие заданного свойства.
Суть в том, что наличие нужного ключа проверяется во время исполнения. Согласен, что у нас может быть чёткий план, что делать при отсутствии нужного ключа. Тогда слово "надеяться" не подходит.


Цитата Сообщение от QueryMonkey Посмотреть сообщение
Там можно выбрать определение по душе.
"Inheritance is what separates abstract data type (ADT) programming from OO programming."

Добавлено через 58 секунд
Цитата Сообщение от QueryMonkey Посмотреть сообщение
И выпал кальмар. И осьминог. И ископаемые динозавры..
У ООП много недостатков.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
11.05.2022, 01:56
Цитата Сообщение от Shamil1 Посмотреть сообщение
Найдите ответ на этот вопрос самостоятельно, заглянув в статью а англоязычной википедии, на которую Вы ссылаетесь.
Я посмотрел на русскоязычную версию, на которую ссылаетесь вы и там пишут, что это ООП язык. Как вы это прокомментируете?

Добавлено через 1 минуту
Цитата Сообщение от Shamil1 Посмотреть сообщение
Общепринятое - принятое большинством.
Русскоязычная версия [в википедии] определения ООП - это большинство?

Добавлено через 3 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, в определении Алана Кэя:
Есть и такое определение:
OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
11.05.2022, 01:57
Цитата Сообщение от Shamil1 Посмотреть сообщение
"Inheritance is what separates abstract data type (ADT) programming from OO programming."
Вы же понимаете, в какую сторону это различие?

Inheritance => ADT (другими словами, ADT только возможно при наследовании).

Edit: снимаю этот комментарий. Даже если это так, расщепление и уточнение терминов вряд ли способствует пониманию.
Для современного ОО наследовательность обязательна, особые случаи VB/DCOM остаются особыми.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 02:06
Цитата Сообщение от Tavashi Посмотреть сообщение
Я посмотрел на русскоязычную версию, на которую ссылаетесь вы и там пишут, что это ООП язык. Как вы это прокомментируете?
Пожалуйста, не задавайте глупых вопросов. Если Вы посмотрите, для опровержения какого утверждения я сослался на рускоязычную вики, то поймёте, что в данном случае не важно, согласен я с ней или нет.

Цитата Сообщение от Tavashi Посмотреть сообщение
Русскоязычная версия [в википедии] определения ООП - это большинство?
Общепринятое определение: ООП = инкапсуляция + наследование (иерархия) + полиморфизм подтипов. Именно этого определения придерживается большинство. Именно так нужно отвечать на собеседовании, если вы хотите, чтобы вас взяли на работу.
0
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
11.05.2022, 02:15
Цитата Сообщение от Shamil1 Посмотреть сообщение
Пожалуйста, не задавайте глупых вопросов. Если Вы посмотрите, для опровержения какого утверждения я сослался на рускоязычную вики, то поймёте, что в данном случае не важно, согласен я с ней или нет.
Так вы не отвечаете прямо: VB это ООП, как написано в русскоязычной версии википедии или нет?
Цитата Сообщение от Shamil1 Посмотреть сообщение
Именно этого определения придерживается большинство.
Почему тогда, если большинство придерживается такого мнения, это не отражено в англоязычной википедии? Это же важный фактор, разве не так?
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
11.05.2022, 02:15
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Inheritance => ADT (другими словами, ADT только возможно при наследовании).
В ADT не используется "наследование" в значении "иерархия". Если кто-то и использует слово "наследование", то имеет ввиду "данный тип реализует (имплементирует) такой-то интерфейс". Наиболее близкий аналог - это тайпклассы в Haskell.

Цитата Сообщение от QueryMonkey Посмотреть сообщение
Для современного ОО наследовательность обязательна, особые случаи VB/DCOM остаются особыми.
Согласен. Никогда не слышал, чтобы DCOM приводили как пример ООП. Ну а "объектно-ориентированный язык" - это что-то типа надписи "без ГМО" на продуктах, которую можно встретить даже на поваренной соли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2022, 02:15

Тесты на знание основ C++
Здравствуйте. Помогите найти тестовые задания по основам программирования на языке с++. Нужно много тестовых заданий (порядка 200-300), по...

Нужны основы основ
Доступ к полям таблиц баз данных FireBird в в среде разработки Builder C++

Разбор основ qt widtgets
Здравствуйте! В первый раз создал qt gui приложение и сразу появилось множество вопросов. Вот код: header.h ...... namespace Ui...

C для изучения основ программирования
Как вы думаете, подходит ли c как язык для изучения основ программирования и погружения в IT сферу. Имею опыт программирования на Python,...

Что изучать после основ?
Всем доброго времени суток, пробуксировал учебник по плюсам, теперь знаю основы от выделения памяти под переменную, до умных указателей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru