Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 03.10.2019, 10:11   #1
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,609
Репутация: 972
По умолчанию Статья про принципы ООП (холивар?)

ИМХО, немного холиварная статья про "принципы ООП". С одной стороны, все это ООП - это очень просто, т.к. "добавили class, public, protected, virtual и ... все?".

С другой стороны, понять как им пользоваться не так легко. Потому что, оказывается, кроме этих ключевых слов есть куча принципов. Но откуда и зачем появились эти принципы и почему я "должен делать именно так?" - спрашивает себя каждый студент.

А еще есть шаблоны проектирования, что с ними делать - пытаться понять или зазубрить? Преподаватель, отвечает на такие вопросы не всегда. Зато на эти вопросы пытается ответить статья, можно поспотрить и пообсуждать эту тему...

Ссылка.
rrrFer вне форума   Ответить с цитированием
Старый 03.10.2019, 11:25   #2
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,296
Репутация: 3739

icq: 512-765
skype: alexp.frl
По умолчанию

А что тут холиварного?
Кто холиварить будет? Любители мучить животных ООП?)

Про юнитов только какой-то странный пример с магическими числами.
Надо для начала обозначить что это за числа (урон оружия?), а потом может и переопределять hit не понадобится.
Alex11223 вне форума   Ответить с цитированием
Старый 03.10.2019, 12:29   #3
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,961
Репутация: 2059
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Все термины переврали.

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Но откуда и зачем появились эти принципы и почему я "должен делать именно так?" - спрашивает себя каждый студент
В статье не раскрыто.

Абстрагирование это обобщение. К примеру квадрат ромб круг это фигура.
Абстрагирование применяется для снижения числа IF при кодирование больших программ.
Для этого применяется принцип подстановки Барбары.
Сам принцип приведен в [1], а доказательство в книге [2]


Модульность. Применяют для ускорения сборки. К примеру за счёт распараллеливания ядро Линукса собирается за 3 минуты а не за 0,5 часа.

Но что-бы разбить на модули нужно переписать классы с использованием принципов капсулирования. Такие принципы как принцип Деметера.

Плюс инкапсуляция делает объекты потоко безопасными.

1. http://ccfit.nsu.ru/~rylov/OOP%26OOD.PDF
2. (Библиотека программиста) Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес-Приемы объектно-ориентированного проектирования. Паттерны проектирования-ДМК Пресс (2010)
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Старый 03.10.2019, 12:38   #4
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,296
Репутация: 3739

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Модульность. Применяют для ускорения сборки.
ну не только для этого же.
Кроме С++ нет языков что ли?

https://en.wikipedia.org/wiki/Modular_programming
Цитата:
Сообщение от Pavia Посмотреть сообщение
Плюс инкапсуляция делает объекты потоко безопасными.
С чего вдруг? Это от реализации зависит.

Последний раз редактировалось Alex11223; 03.10.2019 в 12:41.
Alex11223 вне форума   Ответить с цитированием
Старый 03.10.2019, 12:48   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,100
Репутация: 5675
По умолчанию

вот и начался обещанный холивар!
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 03.10.2019, 13:35   #6
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,609
Репутация: 972
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Абстрагирование применяется для снижения числа IF при кодирование больших программ.
- Я использую низкоуровневую либоу и при этом, постоянно страдаю из-за гибких, но не удобных интерфейсов. Взял вместо этого библиотеку с удобными абстракциями. Можно ли сказать, что абстракции упростили мне жизнь?
- И да, мне постоянно приходилось писать
Код:
if (state == error156) {
 // 
} 
if (state == ok) {
 //
}
Взяв другую библиотеку (в общем случае вообще не объектно-ориентированную, а просто предоставляющую абстракции над всем этим) - я не должен писать if-ы. Но это значит, что я не забуду их написать (случайно) и программа не упадет. Повышает ли хорошая абстракция безопасность кода?
- "дублирование кода свидетельствует об упущенной возможности для абстракции" - это не я сказал, а Фаулер и он имел ввиду не только if-ы.

Модульность - это далеко не только ускорение сборки.

Инкапсуляция - это не только о потокобезопасности.

Вы выдергиваете какие-то частности. И это прямо противоположно "принципам".

Молоток создан чтобы забивать гвозди. Но вы бы, наверняка, добавили что его можно метать и т.п.
rrrFer вне форума   Ответить с цитированием
Старый 03.10.2019, 14:06   #7
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,609
Репутация: 972
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А что тут холиварного?
Кто холиварить будет? Любители мучить животных ООП?)
Я думал набегут вот эти: https://proglib.io/p/oop-fail/
А набежали другие .
rrrFer вне форума   Ответить с цитированием
Старый 03.10.2019, 16:05   #8
Alex11223
Модератор
Заслуженный модератор
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,296
Репутация: 3739

icq: 512-765
skype: alexp.frl
По умолчанию

ООП не противоречит ФП, для него не нужны классы.

https://youtu.be/mPaoy4bnqic?t=5
Alex11223 вне форума   Ответить с цитированием
Старый 03.10.2019, 16:13   #9
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,609
Репутация: 972
По умолчанию

Мне кажется очень бодрое и продуктивное обсуждение вопроса получилось тут: https://programming.d3.ru/statia-uch...sorting=rating.
rrrFer вне форума   Ответить с цитированием
Старый 03.10.2019, 21:37   #10
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,961
Репутация: 2059
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
https://en.wikipedia.org/wiki/Modular_programming
С чего вдруг? Это от реализации зависит.
Не зависит. Синоним к слову инкапсуляция изоляция. Если объекты изолированы друг от друга т.е они не взаимодействуют то они будут потоко-безопасными. Чисто из определения.

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

Конечно есть трудности со скрытыми указателями. Такими как ссылки в Си или Var в паскале. Но это уже свойство конкретного компилятора. Генерирует он потоко безопасный код или нет.

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Я использую низкоуровневую либоу и при этом, постоянно страдаю из-за гибких, но не удобных интерфейсов. Взял вместо этого библиотеку с удобными абстракциями. Можно ли сказать, что абстракции упростили мне жизнь?
- И да, мне постоянно приходилось писать
Так я вам говорил, что вы неправильно термины понимаете. Что-бы избавится от if state надо было брать не гибкую библиотеку. А ту у которой изоляция лучше, выше.

В данном случае стоит применять инверсию управления. Не вы проверяете, а ваша библиотека должны проверять IF.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Холивар - язык программирования 13th Общие вопросы по программированию, компьютерным наукам 36 31.05.2012 23:41
Что такое холивар ЯП? Web-User Помощь студентам 11 22.07.2011 09:50
Принципы работы icq Mantell Общие вопросы .NET 0 30.06.2009 10:42
Классы vs. функции (вопрос, а не холивар) Qousio Общие вопросы C/C++ 7 21.05.2009 18:00


03:20.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.