|
5 / 3 / 2
Регистрация: 27.04.2022
Сообщений: 63
|
|
Понимание основ ООП27.04.2022, 16:33. Показов 16804. Ответов 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
|
||||||||||||
|
Модератор
3142 / 2290 / 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
|
||||
|
Модератор
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 06.05.2022, 10:45 | ||
|
0
|
||
|
Модератор
3142 / 2290 / 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
|
|
|
Модератор
3142 / 2290 / 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
|
|
|
Модератор
3142 / 2290 / 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
|
|
|
Модератор
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||||||||
| 10.05.2022, 20:09 | ||||||||
|
Или для того, чтобы назвать язык объетно-ориентированным, нужен синтаксический сахар, позволяющий вызывать функции через точку?
0
|
||||||||
|
Модератор
3142 / 2290 / 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
|
|
|
Модератор
3142 / 2290 / 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 для изучения основ программирования
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|