|
5 / 5 / 0
Регистрация: 26.12.2010
Сообщений: 42
|
|
Инкапсуляция и конфликт с преподавателем15.01.2024, 02:20. Показов 11948. Ответов 112
Доброго времени суток всем!
Объясню суть происходящего. Я, как студент ВУЗа, недавно провалил попытку сдать зачет по такой дисциплине, как "Теория разработки ПО" (ТРПО). Мне достался вопрос про инкапсуляцию, наследование и полиморфизм. В общем-то суть этих принципов мне ясна в достаточной мере после изучения различной литературы и применения знаний на практике. Однако, с преподавателем случился серьезный конфликт, т.к. он, по неизвестной до конца причине, не считается с книжными или энциклопедическими определениями основных принципов ООП. А проблема тут в том, что подобные книжные определения (с его точки зрения) говорят о том, КАК что-то должно быть реализовано. Т.е. объясняют механизмы реализации, но не отвечают на вопрос ПОЧЕМУ именно так, а не по другому. Уважаемые знатоки ООП, расскажите тогда мне, каких же объяснений ожидает преподаватель на предмет "почему придумали ООП и конкретно инкапсуляцию". Я, честно говоря, в полной расстерянности, т.к. книжные варианты с его точки зрения не дают полной картины происходящего. От него слышал только какие-то туманные фразы про Бьерна Страуструпа, который очень усердно пилил механизм инкапсуляции в C++ именно по этой загадочной причине, и еще какую-то невнятную проблему с тем, что некий сотрудник из команды разработчиков может забыть что-то где-то применить. Вот что он сам предлагает рассматривать, однако и это не исчерпывающий ответ на его вопрос:
1
|
|
| 15.01.2024, 02:20 | |
|
Ответы с готовыми решениями:
112
Как превратить конфликт с преподавателем в сотрудничество? Спор с преподавателем, word Что делать с преподавателем? |
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
|
||
| 16.01.2024, 20:18 | ||
|
1
|
||
|
5 / 5 / 0
Регистрация: 26.12.2010
Сообщений: 42
|
|||
| 16.01.2024, 20:30 [ТС] | |||
|
А о том, что ООП как-то имитировалось ранее этого срока - я слышал примерно нихрена, вот честно признаюсь. Добавлено через 10 минут
0
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
|
|
| 16.01.2024, 22:08 | |
|
В какой-то момент размеры проектов выросли настолько, что структурное программирование уже плохо справлялось, возникла необходимость использовать что-нибудь более продвинутое. ФП использовать не было возможности, так как функциональный код намного сложнее перевести в машинные коды, чем сишный. Когда у вас компьютер с ОЗУ 4 Мб, то встаёшь перед выбором между "кое-как" и "очень долго". (Для большинства задач ФП подходит лучше, чем ООП. Поэтому все популярные ООП языки развиваются в сторону ФП.)
К тому же с появлением персоналок пошла мода на (псевдо)графический интерфейс, для которого ООП подходит очень хорошо. В результате появилось "классическое ООП" - C++ и Java (которое сильно отличается от "ООП Алана Кея"). Далее я использую "ООП" в значении "классическое ООП". Изначально ООП определялось как инкапсуляция + наследование + полиморфизм. инкапсуляция Под инкапсуляцией в первую очередь подразумевалось объединение методов и свойств в одном объекте. Сокрытие данных рассматривалось как необязательный бонус. Причём, сокрытие есть и в не ООП языках (экспорт функций из модуля, замыкания и т.п.), а объединение обычно используется только в ООП. Получается такая "ООП инкапсуляция". наследование Под наследованием подразумевается возможность повторного использования кода путём создания "шаблонов типов" (прототип/класс) из других "шаблонов типов". Далее используем "шаблон типа" для создания экземпляров. Разница между классами и прототипами не принципиальна. Наследование - это та черта, которая, собственно, и отличает ООП от не ООП. Любой код без "полноценного" наследования не является ОО кодом, даже если написан на "чисто ОО ЯП" типа Java или C#. Полноценное наследование - это наследование реализации метода. То есть, наследование от интерфейса или "полностью абстрактного" класса - это всего лишь способ на ООП языках выразить некую общую (не ООП) идею. Программирование объектами тоже не является особенностью ООП. В том же Си вполне себе используются объекты. В зарубежной литературе даже есть термин object based programming, который отличается от ООП. В определении из википедии (взято у Буча): Объе́ктно ориенти́рованное программи́рование (сокр. ООП) — методология или стиль программирования на основе описания типов/моделей предметной области и их взаимодействия, представленных порождением из прототипов или как экземпляры классов, которые образуют иерархию наследования. Ключевая фраза здесь - "которые образуют иерархию наследования". Без наследования нет ООП, полиморфизм Под полиморфизмом в ООП подразумевается исключительно полиморфизм подтипов. Специализированный ("неполноценный") полиморфизм (перегрузка методов, неявное приведение типов) используется и в структурном программировании. Параметрический полиморфизм используется в ФП. Штука настолько хорошая, что позже его добавили и в ООП в виде обобщённых классов и методов. А ООП - это про полиморфизм подтипов. Почему Изначально написали графический ООП интерфейс. Получилось настолько хорошо, что решили приспособить идею и для других задач. В качестве обоснования сказали, что 1) всё вокруг объекты и 2) эти объекты образуют иерархию. Здесь "объекты" - в ООП смысле, то есть, действия привязаны к объектам. Кошки мяукают, собаки лают - и те, и те животные. У треугольника площадь и у прямоугольника площадь - и те, и те фигуры. Примерно такие примеры можно было встретить в ранних ООП учебниках. Правда, потом выяснилось, что иерархия в обычном понимании не подходят для ООП, да и нет вокруг никакой иерархии - есть признаки (атрибуты). Учебник на русском языке по алгоритмам на примере Java - попробуйте выстроить иерархию. Квадрат является прямоугольником, но только не в ООП смысле. Документ не сохраняет себя (метод Sava), а есть некий "сохранятель", причём, иерархия сохранятелей (например, репозиториев) никак не связана с иерархией документов. Поэтому стали отделять данные от методов, добавлять в ООП языки ФП черты, создавать реактивные интерфейсы и так далее. А новые языки, скорее уже "ФП с чертами ООП", чем "ООП с чертами ФП".
3
|
|
| 17.01.2024, 13:50 | ||||
1
|
||||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
|
|||
| 17.01.2024, 22:28 | |||
|
1
|
|||
|
Just Do It!
|
||
| 18.01.2024, 16:29 | ||
|
препод видит, что чувак не ходил на его лекции и на сдачах пытается городить свои огороды. а почему не ходил то? "потому что меня - препода не уважает." ну тогда:
0
|
||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
|
| 22.01.2024, 21:43 | |
|
Инкапсуляция (от лат. in capsule — в оболочке) — это заключение данных и функционала в оболочку. (Из поиска Яндекса)
Суть: есть два метода Draw и Show. Есть две переменных Image, BackColor. Объединить в одну оболочку - это значит дать им всем общее имя. Object_Draw() Object_Show() Object_Image Object_BackColor Вот так бы я делал без ООП. Но ООП позволяет делать так: Object.Draw() Object.Show() Object.Image Object.BackColor Разница в том, что мы один раз объявляем имя Object и по одному разу - члены/методы. То есть соблюдаем правило DRY.
0
|
|
|
|
|
| 23.01.2024, 06:50 | |
|
Меня удивляет, что никто не упомянул динамическую память.
Добавлено через 1 минуту Словари и полиморфизм были и в Форте Добавлено через 1 минуту Без возможности порождать инстанты в полете - ООП - гуно
1
|
|
|
593 / 230 / 72
Регистрация: 13.05.2020
Сообщений: 412
|
||
| 23.01.2024, 09:35 | ||
|
2
|
||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
||
| 23.01.2024, 09:39 | ||
|
Инкапсуляция - это группировка переменных и функций под общим именем. Была придумана, чтобы побороть хаос именования переменных и функций. И как кто-то уже сказал выше, переходить на более высокий уровень абстракции (=скрывать детали реализации). Когда вы копируете, Object в Object2, то не задумываетесь, что копируете Draw(), Show(), Image и BackColor. Но совсем примитивно-древняя потребность в инкапсуляции - это чтобы родственные функции и переменные группировались рядом при лексикографическом порядке.
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 23.01.2024, 10:32 | |||
|
1
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
|
|||
| 23.01.2024, 20:07 | |||
|
Добавлено через 4 минуты
1
|
|||
|
5 / 5 / 0
Регистрация: 26.12.2010
Сообщений: 42
|
||||||
| 26.01.2024, 12:54 [ТС] | ||||||
|
А "огороды городить" - это что вообще? Т.е. научное определение из учебных пособий уже превратилось в "горожение огородов"? Вообще без разницы статус человек, ссылаться можно только на научные источники, а не на себя любимого и свое понимание вопроса. Естественно, раз я сказал что уточню ответ как придет время - я так и поступлю. Как вы поступаете - ко мне отношения не имеет. Время как раз пришло. Верный ответ на самый важный и сложный вопрос в мире... Пишу прям дословно:
___________________ Всем остальным выражаю благодарность за свои ответы и попытки помочь разобраться.
1
|
||||||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,318
|
|
| 26.01.2024, 13:01 | |
|
0
|
|
|
5 / 5 / 0
Регистрация: 26.12.2010
Сообщений: 42
|
|||
| 26.01.2024, 13:25 [ТС] | |||
|
Тут пометка - это НЕ ответ на вопрос "КАК работает/устроена/реализована". Именно второй ответ можно поголовно встретить в учебных пособиях разных лет (пришлось сверяться еще несколько раз). Насколько такой ответ можно рассматривать с точки зрения корректности на экзамене у конкретного преподавателя - я судить не буду, как и иные ответы в теме не обозначаются как ошибочные сами по себе. Добавлено через 2 минуты
0
|
|||
| 26.01.2024, 18:41 | ||||||
![]()
1
|
||||||
|
5 / 5 / 0
Регистрация: 26.12.2010
Сообщений: 42
|
|||||
| 26.01.2024, 19:23 [ТС] | |||||
|
Однако, сам преподаватель в той же самой лекции где и сидел заветный ответ сказал, что (почти дословно):
1. Саму инкапсуляцию можно поломать самыми разными способами (в зависимости от ЯП), а то и вовсе позабыть что-то инкапсулировать, но по-умолчанию при таком подходе будет считаться, что ошибка где-то в другом месте. И подобное наоборот увеличит время на поиск этой самой ошибки. 2. Что облегчает работу, то её может и усложнить, в зависимости от ситуации. И банально было бы думать, что найдена "таблетка от всех проблем". К тому же да, таких побочных продуктов можно найти огромное множество и не только ООП их будет генерировать, что делает обсуждение подобных вопросов довольно абсурдным из-за своего огромного разнообразия и при этом низкой практической пользы. Мне лично больше понравились ответы от местной публики, я бы отдал им приоритет, но с учетом всяких пометок, что "...в ряде случаев проще будет отыскать ошибку, если...". В целом же, я сам не эксперт и не специалист, чтобы совершенно точно и однозначно утверждать, что "уж теперь-то я наверняка знаю что такое инкапсуляция и зачем она нужна". Мои знания и опыт сильно ограничены, чего я не скрываю.
2
|
|||||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
|||
| 27.01.2024, 09:12 | |||
|
0
|
|||
|
489 / 536 / 131
Регистрация: 31.10.2016
Сообщений: 4,380
|
|
| 27.01.2024, 09:19 | |
|
TRIG, прочитайте в лекциях своего преподавателя, если их нет - перепишите. Он не может с вас требовать того, чему вас не учил.
0
|
|
| 27.01.2024, 09:19 | |
|
время, затрачиваемое преподавателем на экзамене Стоит ли мне быть преподавателем? Найти количество лекций, прочитанных преподавателем по данному предмету Не работает программа на Mathcad, написанная преподавателем? Учитель привел неверную программу Создать класс- вектор, который имеет указатель на тип определенный преподавателем и число элементов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|