diff options
Diffstat (limited to 'content/digarden/pages/20210425152343-ооп.org')
-rw-r--r-- | content/digarden/pages/20210425152343-ооп.org | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/content/digarden/pages/20210425152343-ооп.org b/content/digarden/pages/20210425152343-ооп.org deleted file mode 100644 index b2eb29e..0000000 --- a/content/digarden/pages/20210425152343-ооп.org +++ /dev/null @@ -1,161 +0,0 @@ -:PROPERTIES: -:ID: d59ae5ab-7189-4d37-ab8b-259eaaa57995 -:END: -#+title: ООП - -* ООП -** Термины -- Абстрактный класс :: класс, не предполагающий создание - экземпляров. Используется только для наследования другими классами. -- Сервис :: класс, который структуризирует некоторую функциональность и - даёт её использовать другим классам. Что-то вроде файлов utils из - других языков, но в ООП мире. - - Подробнее о сервисах: [[[https://en.wikipedia.org/wiki/Service-oriented_programming][Wikipedia: Service-Oriented Programming]]] -** Отношения -- Наследование :: отношение "является". Легковой автомобиль является - автомобилем, значит легковой автомобиль наследуется от класса - автомобиля. -#+begin_src c-sharp -class Vehicle -{ - bool hasWheels; -} - -class Car : Vehicle -{ - string model = "Porshe"; - int numberOfWheels = 4 -} -#+end_src - -- Ассоциация :: отношение "имеет". Автомобиль имеет двигатель, двигатель - не является автомобилем, соответственно двигатель не будет являться - наследником класса автомобиль. -#+begin_src c-sharp -class Engine -{ - int power; - public Engine(int p) - { - power = p; - } -} - -class Car -{ - string model = "Porshe"; - Engine engine; - public Car() - { - this.engine = new Engine(360); - } -} -#+end_src - - - Композиция :: двигатель создаётся внутри автомобиля и не является - отдельной сущностью. -#+begin_src c-sharp -class Engine -{ - int power; - public Engine(int p) - { - power = p; - } -} - -class Car -{ - string model = "Porshe"; - Engine engine; - public Car() - { - this.engine = new Engine(360); - } -} -#+end_src - - - Агрегация :: двигатель является отдельной сущностью и включается в - класс автомобиля, путём передачи в конструктор. -#+begin_src c-sharp -class Engine -{ - int power; - public Engine(int p) - { - power = p; - } -} - -class Car -{ - string model = "Porshe"; - Engine engine; - public Car(Engine someEngine) - { - this.engine = someEngine; - } -} - -Engine goodEngine = new Engine(360); -Car porshe = new Car(goodEngine); -#+end_src - - -Подробнее об этих отношениях в [[https://habr.com/ru/post/354046/][статье "Наследование, композиция, -агрегация"]]. -** Модификаторы доступа -- *public* -- доступно всем -- *private* -- доступно только классу, недоступно экземпляру и наследнику -- *protected* -- доступно классу и наследнику, недоступно экземпляру - -- *final* -- нельзя отнаследоваться никому -- *static* -- метод принадлежит классу, а не экземпляру -*** Статьи -- [[https://habr.com/ru/post/482154/][Зачем ограничивать наследование при помощи final]] -** Интерфейсы -Это что-то вроде типов данных, которые обязывают классы при их -реализации иметь те или иные поля и методы. -** Dependency Injection -Частный случай инверсии зависимостей. - -[[https://habr.com/ru/post/321344/][Инверсия зависимостей на Хабре]] -*** Service Locator -Дав интерфейс Service Locator'у, он возвращает экземпляр конкретного -класса, реализующий переданный ему интерфейс. -** Хорошие вещи -*** Интерфейсы -*** Композиция классов, mixin'ы, trait'ы и т.д. -** Критика -http://smashcompany.com/technology/object-oriented-programming-is-an-expensive-disaster-which-must-end -*** Геттеры и Сеттеры используются не по назначению -Часто они нужны лишь чтобы засетить тоже значение что и при прямом -обращении к свойству. А геттер возвращает ровно то же значение, что и у -свойства. - -https://lispcast.com/why-getters-and-setters-are-terrible/ -https://www.infoworld.com/article/2073723/why-getter-and-setter-methods-are-evil.html -*** Аннотации -*** Наследование -*** Паттерн Синглтон -Зачем создавать класс, который плодит всего один объект, если возможно -создать сразу объект как например в Javascript или Scala. -*** Классы используются ради единственной сущности, а не ради многих -*** Классы используют тогда, когда можно обойтись структурой -** ООП нетрадиционное -- Lisp -- Smalltalk -- Erlang -- Ruby / Python - -[[id:bfb12d94-bef4-4e20-bc3a-67881e050ca1][Metaobject Protocol]] -** ООП в разных языках -- [[id:3df0aee3-71c5-4c3e-8833-85bd9db7093c][ООП в Javascript]] -- PHP -- Java -- C++ -** Видео -- [[https://youtube.com/watch?v=lbXsrHGhBAU][Object-Oriented Programming]] -- [[https://www.youtube.com/watch?v=QM1iUe6IofM][Object-Oriented Programming is Bad]] -- [[https://youtube.com/watch?v=0iyB0_qPvWk][Object-Oriented Programming is Good*]]
\ No newline at end of file |