Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2019, 14:52   #1
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию Смешанный стиль

"1. SPR (Single responsibility principle) - Принцип единственной обязанности
В объектно-ориентированном программировании принцип единственной обязанности (англ. Single responsibility principle) обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. "

То есть внутри ООП нельзя писать функции и процедуры вне классов? или как? Но иногда ведь так проще? Кто пользуется смешанным стилем? Удобно ли это? нет ли проблем с чтением кода у тех, кто берется за программу после вас?
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками

Последний раз редактировалось anaschu; 03.08.2019 в 15:30.
anaschu вне форума Ответить с цитированием
Старый 03.08.2019, 14:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Где SRP запрещает писать функции вне классов?
p51x вне форума Ответить с цитированием
Старый 03.08.2019, 15:10   #3
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию

значит, смешанного стиля нету.
Но вот тогда встает вопрос.
Скажем, есть программа - матрешка.
Нижний слой- это обьект животное. Второй слой- обьект "территория, на которой живет животное". Третий- территория материка.
Четвертиый- собетсвенно, интерфейс.

ну и вот вопрос.
если программа сотоит из матрешки в 4 класса. то верхний класс может быть и не оформлен как класс. и вроде как должно и так работать.
вопрос в том, а правильно ли так делать?
У нас же не может быть несколько экземпляров материка или несколько классов "формы 1" в нашей простейшей программе. Потому класс вроде как не нужен




И с какой стороны правильно.
Например, в моем случае программа может быть интегрирована с более большой программой, в которой есть еще 6 классов- матрешек.
И вот как мне поступать?

Верхние два слоя прописывать классом или "процедурно"?
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками
anaschu вне форума Ответить с цитированием
Старый 03.08.2019, 15:40   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от anaschu Посмотреть сообщение
Скажем, есть программа - матрешка.
Нижний слой- это обьект животное. Второй слой- обьект "территория, на которой живет животное". Третий- территория материка.
Четвертиый- собетсвенно, интерфейс.
Так это не матрешка. Матрешка, обычно, подразумевает либо включение, либо содержание...

Цитата:
Сообщение от anaschu Посмотреть сообщение
У нас же не может быть несколько экземпляров материка или несколько классов "формы 1" в нашей простейшей программе. Потому класс вроде как не нужен
Наличие класса и кол-во объектов вообще-то несвязано.

Цитата:
Сообщение от anaschu Посмотреть сообщение
Верхние два слоя прописывать классом или "процедурно"?
Как вам удобнее. Я встречал и объект, который внутри держит меш для поверхности и некоторые методы, и процедурно навалянные функции.
p51x вне форума Ответить с цитированием
Старый 03.08.2019, 15:45   #5
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 372
По умолчанию

https://youtu.be/29UW13cMsrQ
Занимаюсь:1.зверьком- покемончиком для компьютерного затончика. 2 IT-грибами,что бы скушать потом их с вами.3. цифровым обезьянками, как куны ударяют за тянками
anaschu вне форума Ответить с цитированием
Старый 03.08.2019, 16:34   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

anaschu
SPR подразумевает что свойства и методы public используют только простые типы и записи, а не классы.
Интерфейсы можно использовать. Но только если используется принцип вызова в виде дерева. Т.е. ситуация когда нарушается правило инкапсуляции недопустимо.

Правило инкапсуляции 1.
Когда класс А вызывает метод из B и одновременно
класс B вызывает метод из A недопустимо
Тоже самое для свойств.

В приватных полях можно держать классы.

Цитата:
Сообщение от anaschu Посмотреть сообщение
То есть внутри ООП нельзя писать функции и процедуры вне классов? или как?
Это совсем другое. Чистое ООП против ООП смешанного с функциональным(процедурным,структур ированной) парадигмой.

Но SPR это не нарушает.

Цитата:
Сообщение от anaschu Посмотреть сообщение
вопрос в том, а правильно ли так делать?
А почему нет то? На самом деле это даже удобнее.

Цитата:
Сообщение от anaschu Посмотреть сообщение
У нас же не может быть несколько экземпляров материка или несколько классов "формы 1" в нашей простейшей программе. Потому класс вроде как не нужен
В ООП для этого есть понятие класс сингтон(одиночка). В Delphi в конструкторе проверяется глобальная переменная и если она nil то создается класс иначе ссылка self заменяется на этот глобальный объект.
В других языках это сложнее там создаётся глобальный именной объект мьютекс и из него читается. Тут ОС гарантирует что такой мьютекс будет создан в единичном экземпляре. Либо городят костыль в виде файла.


Цитата:
Сообщение от anaschu Посмотреть сообщение
Верхние два слоя прописывать классом или "процедурно"?
Как вам больше нравится. ООП более гибкий зато функции позволяют избежать ошибок с проектированием архитектуры да и интерфейс получается более простой более компактный.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 03.08.2019 в 16:39.
Pavia вне форума Ответить с цитированием
Старый 03.08.2019, 16:49   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
а не классы.
Вернее классы в параметрах методов можно использовать. Но только как временные объекты. Их нельзя сохранять во внутренних полях своего класса. А если это нужно сделать, то порождается копия(инстацируется). Либо поля из класса переданного в качестве параметра копируются в приватный.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 04.08.2019, 02:10   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от anaschu Посмотреть сообщение
То есть внутри ООП нельзя писать функции и процедуры вне классов? или как?
<OFFTOP>
Правила существуют для тех, кто не умеет думать. И это правильно.
Те кто думать умеет, создают новые правила.
P.S. Почти по Гегелю
</OFFTOP>
Тут надо ещё добавить что есть очень большая разница между написанием/разработкой классов и написанием пользовательской программы на основе этих классов.

Последний раз редактировалось northener; 04.08.2019 в 02:18.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СЧЁТЕСЛИ(только Кириллица ) и СЧЁТЕСЛИ(смешанный текст) 0mega Microsoft Office Excel 14 20.01.2017 22:19
Стиль CSS для IE lostbananan HTML и CSS 3 04.11.2012 21:45
Стиль Poma][a Паскаль, Turbo Pascal, PascalABC.NET 27 22.10.2012 21:42
Графика в TurboPascal: Процедуры, рисующие на экране смешанный лес (лес состоит из елей) по курсору GreenDay Помощь студентам 2 04.05.2011 13:31