|
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63
|
|
Понимание основ ООП27.04.2022, 16:33. Показов 16497. Ответов 188
Метки нет (Все метки)
Добрый день!
Начал изучать ООП и сразу возникло непонимание на изучении классов. У любого класса есть набор своих индивидуальных свойств, но ведь есть и свойства, которые будут общими для всех классов. Например, температура и плотность, если мы говорим о материальных вещах. Да и вообще любые физические и химические свойства для всех материальных вещей будут общими: электропроводность, молярный вес и т. д. Понятно, что они будут иметь различные значения, но фундаментально эти понятия будут едиными для любых классов, выражающих эти самые материальные вещи. Соответственно, при создании объектов мне необходимо будет для каждого из них задавать свойство, допустим, «Температура» или языки ООП позволяют создать некое «глобальное, общее» свойство и при создании конкретного объекта я смогу присваивать ему это «глобальное» свойство, задавая лишь значение?
0
|
|
| 27.04.2022, 16:33 | |
|
Ответы с готовыми решениями:
188
Знание основ ООП/Джава освоение основ |
|
945 / 120 / 30
Регистрация: 28.11.2018
Сообщений: 304
|
||||||||
| 05.05.2022, 14:17 | ||||||||
|
Сразу предупрежу - я не считаю себя экспертом в ООП, но, кмк, как тут уже упоминали выше, чтобы лучше объяснить ООП, стоит начать с обычного процедурного программирования и попрограммировать немного без объектов, а потом показать, как объекты меняют ситуацию. Это будет дольше, зато понятнее. Идея примерно в следующем. Допустим, у вас есть код, который имеет дело с прямоугольниками. У прямоугольника есть координаты левой верхней вершины и правой нижней. Вы их называете как-нибудь, ну, типа xlu, ylu, xrb, yrb (lu - "left up", rb - "right bottom"). Дальше пишете какое-то количество кода, где эти переменные используются. Вычисляете длины сторон и диагоналей, периметр, площадь, и так далее. Допустим, далее вам нужно код доработать и использовать 3 прямоугольника. Что делать? Ну понятно что: объявляем 12 переменных (xlu1, ylu1, xrb1, yrb1, xlu2, ylu2, ... - ну вы поняли). Также имеет смысл вынести вычисления (площади, периметра, сторон...) в отдельные функции. Допустим далее, вам нужно еще несколько кругов. Тут тоже понятно: еще пара десятков переменных (xc1, xy1, r1, xc2, yc2, r2, ...), новые функции (recangle_perimeter, circle_perimeter, ...). И итог: жуткое месиво из десятков переменных, кучи функций, миллион ошибок вида вызова функции с не теми переменными
И тут появляются объекты! Основная идея - навести порядок. Объявляем структуру "Прямоугольник" с координатами и привязанными к структуре функциями (расчеты периметра, площади и т. п.). Количество переменных сокращается в четверо. Больше никаких ошибок вида "передали в функцию две координаты одного прямоугольника и две от другого". Ну и вообще код раскладывается "по полочкам": вот тут - внутренние дела объекта, вон там - все остальное. Далее, у нас же еще круги были? Создаем класс Shape, и двух наследников - Rectangle и Circle. Допустим, кроме всего прочего, у нас была необходимость вычислять общую площадь всех фигур. Как вам помогут эти классы? Ну можно сделать у класса Shape функцию getArea и переопределить ее у наследников. А использовать следующим образом. Можно создать массив (коллекцию, или другую подобную структуру) объектов типа Shape, помещать в него объекты не типа Shape, a производных типов (Rectangle или Circle), а потом, когда надо просуммировать площади - можно будет пройти по списку и у каждого вызвать метод getArea, который будет по факту работать по-разному у каждого объекта в зависимости от того, что это за объект на самом деле. Примерно так, на мой взгляд, лучше объяснять ООП.
0
|
||||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
||
| 05.05.2022, 16:45 | ||
|
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||||||||||||||||||||||||||||||||
| 05.05.2022, 20:37 | ||||||||||||||||||||||||||||||||||||||
|
Добавлено через 13 минут
То же самое с явным указанием типа
Добавлено через 4 минуты Добавлено через 4 минуты
type friend для этого не обязательно, можно сколько угодно таких типов с любыми именами объявить:Кликните здесь для просмотра всего текста
И никакого наследования, при этом. Добавлено через 33 минуты И не вижу в том примере проверки на наличие метода с неким именем.
0
|
||||||||||||||||||||||||||||||||||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
||
| 05.05.2022, 21:07 | ||
|
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||||||
| 05.05.2022, 21:26 | ||||||||||||
|
Shamil1, вот ещё немного информации к размышлению: В (настоящем) ООП можно описать унверсальный прокси-объект, который будет, например, логировать все входящие сообщения и ответы для любого класса. Типа такого (в псевдокоде):
0
|
||||||||||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
|||||||||||||||||
| 06.05.2022, 01:39 | |||||||||||||||||
|
Вот аналог на Haskell:
0
|
|||||||||||||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||||||||||||||||
| 06.05.2022, 02:12 | ||||||||||||||||||||||
Ну считай, что такой метод есть. Теперь давай по-новой.Добавлено через 4 минуты
0
|
||||||||||||||||||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
||||
| 06.05.2022, 08:37 | ||||
|
Добавлено через 5 минут Захожу на русскоязычную версию википедии и в двух местах нахожу записи, которые говорят, что общепризнанного представления ООП как раз нет:
0
|
||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 06.05.2022, 10:45 | ||
|
0
|
||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||||||||||
| 06.05.2022, 11:44 | ||||||||||
0
|
||||||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
|
| 06.05.2022, 17:23 | |
|
0
|
|
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
|
|
| 07.05.2022, 05:03 | |
|
Простой объект/класс Rectangle, который умеет считать свою площадь, без всякого наследования - это ООП, трудно оспорить такую точку зрения. Разве нет? Инкапсуляция без сокрытия, т.е. объединение под общим именем переменных, функций и других объектов - вот истинный принцип ООП.)))
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||||||||||||||||||
| 07.05.2022, 13:29 | ||||||||||||||||||
0
|
||||||||||||||||||
|
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
|
|
| 07.05.2022, 18:54 | |
|
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 10.05.2022, 18:43 | ||
|
з.ы. Даже в cls модулях не ООП, а неполноценное "псевдо ООП", которое можно "дословно" перевести, например, на Си.
0
|
||
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
|
|
| 10.05.2022, 18:53 | |
|
На основании чего у вас эти языки-то не ОО?))
Си - это ОО-язык без классов (без плюсов). Сколько версий критериев ОО-языка вы выдвинете, может их классифицируете от псевдо-ОО до full-ОО? А может нужно просто разобраться в этом достаточно простом вопросе, просто покрутив в голове понятие объекта и определив базовые его свойства?
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||||||||
| 10.05.2022, 20:09 | ||||||||
|
Или для того, чтобы назвать язык объетно-ориентированным, нужен синтаксический сахар, позволяющий вызывать функции через точку?
0
|
||||||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 10.05.2022, 20:31 | ||
|
Объектно-ориентированные языки поддерживают все ОО черты: инкапсуляция, наследование, полиморфизм подтипов. Объектные языки поддерживают только "инкапсуляцию в объекты". Также они могут поддерживать какой-нибудь другой полиморфизм (перегрузка функций, параметрический и т.д.). По сути, от "обычных" языков они отличаются тем, как реализована инкапсуляция (доступ к функциям не через модули, а через объекты). Про объектные языки часто говорят "языки с элементами объектно-ориентированного программирования". Хотя, некоторые считают объетные языки объектно-ориентированными. Предположу, что если на собеседовании на вопрос "назовите основные черты ООП" Вы ответите "инкапсуляция и всё", к Вам отнесутся без понимания.
0
|
||
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
|
|
| 10.05.2022, 21:19 | |
|
Собеседование-то ладно, любой может попасться, но можно тыкнуть любого в википедию. Должно быть хоть какое-то объяснение личному мнению... Ну пусть, ладно, это будет лично изобретенная градация О-языков.
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
|||||||||
| 10.05.2022, 22:35 | |||||||||
|
И, специально для Вас, представляю объектно-ориентированный Хаскель:
А ещё лучше откройте классику. Например, "Concepts, Techniques, and Models of Computer Programming (The MIT Press)". Или изучите язык Оз.
0
|
|||||||||
| 10.05.2022, 22:35 | |
|
Тесты на знание основ C++ Нужны основы основ Разбор основ qt widtgets C для изучения основ программирования
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|