summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20210425152343-ооп.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20210425152343-ооп.org')
-rw-r--r--content/digarden/pages/20210425152343-ооп.org161
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