safenoob
@safenoob

Можете пояснить принципы ООП?

Принципы из статьи: https://habrahabr.ru/post/140827/

5. Классы должны быть открыты для расширения, но закрыты для изменения.
Класс это не переменная, которая была 1 а стала 2. Как класс может измениться?

6. Взаимодействуйте только с близкими друзьями.
Что такое близки и дальние друзья, как отличить их друг от друга? Есть же MVC в которой чётко прописывается что контроллер взаимодействует с моделью (односторонне) а модель с видом (тоже односторонне). Так вот же они все друзья уже прописаны )

8. Класс (или метод) должен иметь только одну причину для изменения.
Тут вопрос как и в п.5 выше про изменения, но в описании фраза:
"Принцип указывает на то, что классу (как и методу) должна быть выделена только одна обязанность" - это понятно, класс должен делать только одно действие, но при чём тут изменение тогда?
  • Вопрос задан
  • 574 просмотра
Решения вопроса 4
arusef
@arusef
Novice .NET dev
Это принципы, касающиеся не столько процесса выполнения программы, сколько её дизайна. Все изменения в данном случае - процесс переписывания исходного кода программистом.
Архитектура приложения должна быть составлена таким образом, чтобы для некоторого изменения её функционала, расширения и т.д. достаточно было бы изменить код лишь в узком круге мест, а для добавления нового - вовсе ничего не меняя, включить новые элементы. На такую гибкость, лёгкость в сопровождении/тестировании, читабельность, и направлены принципы ООД, которые определяются вот уже несколько десятков лет.
Это очень обширная тема, требующая огромных знаний и опыта в сфере ООП. Лучше начинать с чего-то простого, и не лезть в тот же MVC без хотя бы базового понимания этих принципов.
Ответ написан
jacksparrow
@jacksparrow
Вы выбрали не лучшую статью по смыслу
5 . Класс имеется ввиду как сущность, а не экземпляр класса
6. Мутная формулировка малой зависимости от других классов
8. Опять непонятна формулировка . Ключевое - одна обязанность

А так читайте про grasp и solid
Ответ написан
Комментировать
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Странные формулировки, прочитайте еще 5 таких статей и придет понимание. а лучше параллельно пробуйте. Пробуйте и читайте.
Вот для примера:
https://megamozg.ru/post/6908/
https://megamozg.ru/post/6910/
Ответ написан
@newpy
web-dev
Какие то принципы в вашей статье странные, и больше запутывают. Пробуйте проще.

Фигуры. Эллипс, Круг, Квадрат, Ромб, Треугольник, Прямоугольник. Что их объединяет? Что отличает? У всех есть площадь, но у всех она разная, у Круга нет Сторон, но она есть у остальных. У Треугольника их три, у остальных четыре. У некоторых есть Периметр, у Круга длина окружности. Вычисляются периметры, площади, длина окружности по-разному. При этом все они относятся к фигурам. Какие из них мы можем расширить? Да все практически. Добавить им какие-то методы, например Треугольнику метод для вычисления биссектрисы, или угла. Но мы не можем сделать тоже самое для круга например. Более того мы не можем позволить экземпляру класса Прямоугольник менять или задавать стороны Треугольника. Т.к. у них разное количество сторон, и не можем по формуле вычисления площади ромба, вычислить площадь Круга. Зато мы можем еще расширить немного класс Треугольников. Например создать класс Равнобедренных треугольников и Равносторонних треугольников. И те и другие будут треугольниками, и те и другие еще и Фигурами. Но свойства Равнобедренного и Равностороннего будут несколько отличаться. Например тем, что Стороны равны, а еще Углы могут быть равны. А еще мы можем вообще создать Классы Угол и Сторона, наделить их свойствами, действиями и передавать их в наши Фигуры! Или например из двух Равнобедренных треугольников создать Ромб! Для этого мы можем расширить Ромб методом, который умеет создавать из двух только Равнобедренных треугольников Ромб. Тому же самому мы можем научить Квадрат! Можем создать еще Прямоугольный треугольник, и из двух прямоугольных составлять Прямоугольник! Мы можем "прятать" свойства наших фигур от посторонних глаз, и чтобы никто не смог изнутри взглянуть как вычисляется площадь, зато мы можем предоставить метод, чтобы сразу узнать площадь, мы можем попросить что-то взамен. Например передать нам для вычисления площади стороны, или угол и стороны. Мы можем запретить менять площадь нашей фигуры. Или запретить менять стороны. Чтобы мы всегда знали наши стороны, ведь если каждый будет их менять, то это будет хаос, кто-то неграмотный попадется, и Квадрату сделает разные стороны! Что тогда будет? Площадь и периметр тоже сломаются, сломается сам Квадрат. Вот и попробуйте объяснить себе ответы на ваши вопросы.

Краткий геометрический экскурс закончил. Пытайтесь представить себе все на примерах из жизни. Вокруг вас столько объектов. Автомобили, Люди, Животные и жЫвотные, сложно себе представить более простое понимание объектов.

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

(Предполагаю желающих сказать что можно и из человека сделать животное, и изменить цвет глаз и волос, но мы все таки о программировании и условно :) )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sgjurano
@sgjurano
Разработчик
Как мне сразу построить трехэтажный дом с подземным этажом и газовым отоплением? Опыта строительства не имею, на маленьких домиках ничему не научишься, а проекты больших домов мне непонятны.

Начинайте с маленьких проектов и с опытом начнет приходить понимание базовых принципов. Другого пути нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы