
Ilia
12.03.2017
23:18:53
принцип инкапсуляции в изолировании методов и свойств от других методов и классов; а чтобы получить доступ к методу класса, нужно поместить его в строго определяемый публичный метод этого класса?
я схоронил как-то сообщение @fes0r про порядок изучения:
1. Инкапсуляция
2. Закон Деметры
3. Полиморфизм
4. LSP
5. OCP
6. ISP
7. DIP
8. Coupling/cohesion
9. GRASP
10. GoF
11. P of EEE
вник в деметру, то есть у деметры недостаток в моем последнем предложении
деметра - обратное от наследования(хотя является его производным)

Google

Ilia
12.03.2017
23:20:16
паттерн синглтон частично нарушает деметру?

Sergey
12.03.2017
23:31:06

Ilia
12.03.2017
23:31:34
сложная формулировка)
полиформизм дичь вообще какая-то... виртуализация... уйдет много времени на абстракции, код ведь реальный, и объекты(классы) реальны

Sergey
12.03.2017
23:32:34
все намного проще)
ну или я тебя не понял) какая виртуализация?

Ilia
12.03.2017
23:33:20
чта?
пример на php.su/learnphp/phpoo/?cp
ак оно на самом деле и есть. Функция, переопределяемая в производном классе, называется виртуальной

Sergey
12.03.2017
23:34:13
ну ты рассматриваешь конкретную реализацию а не концепцию
с концептуальной точки зрения следует вообще забить на то как происходит диспетчеризация
ну то есть как ты добиваешься того что бы по определенной сигнатуре вызывался нужный метод конкретного класса - это все как бы детали. Суть то в том что тебе не должно быть дела кто принимает сообщение (вызов метода по простому)

Ilia
12.03.2017
23:35:51

Google

Sergey
12.03.2017
23:36:09

Ilia
12.03.2017
23:36:36

Sergey
12.03.2017
23:36:52
ну я пока не улавливаю ход твоих мыслей)

Ilia
12.03.2017
23:38:08

Sergey
12.03.2017
23:38:27

Ilia
12.03.2017
23:38:43

Sergey
12.03.2017
23:38:57
драйвера для устройств ввода/вывода
один интерфейс (табличка функций) и множество реализаций
клиенту плевать кто будет обрабатывать запросы
(клиент это код который использует функции)
или там stdout/stdin процесса. Ты имеешь дело с абстракцией - потоки ввода/вывода. Но куда они пишут тебе как бы плевать
это что бы совсем абстрогироваться от классов и прочего булшита)

Ilia
12.03.2017
23:40:52
если очень грубо: использование метода неважно где?(и необязательно в дочернем?)

Sergey
12.03.2017
23:41:05
выкинь наследование из этого уравнения.

Ilia
12.03.2017
23:41:36
если очень грубо: использование метода неважно где

Sergey
12.03.2017
23:41:42
просто в большинстве языков наследование это единственный способ добиться полиморфизма подтипов

Ilia
12.03.2017
23:42:03

Sergey
12.03.2017
23:42:05
какой бы пример привести.... ну например - у тебя есть клиент и сервер. Они шлют друг другу сообщения.

Google

Sergey
12.03.2017
23:42:51
если ты поставишь между ними кеширующий мидлварь, клиент об этом даже не узнает.

Ilia
12.03.2017
23:43:23

Ivan
12.03.2017
23:44:10
представь что ты водила.
у тебя есть 2 тачки
Феррари
и
Лада Седан
они оба реализуют интерфейс
Тачка
с методом
погнали
тебе как водиле | клиенту абсолютно похер что там и как едет
ты лишь дергаешь метод
поехали
который был реализован

Sergey
12.03.2017
23:44:13
ну я пытаюсь подбирать примеры максимально оторванные он языков программирования, что бы была понятна суть

Ilia
12.03.2017
23:44:53

Sergey
12.03.2017
23:45:06

Ilia
12.03.2017
23:45:09
я ведь в итоге что-то получу(что неважно)

Ivan
12.03.2017
23:45:12
проще говоря приведение к одному интерфейсу

Sergey
12.03.2017
23:45:15
ну мол поясни что ты подразумаваешь под порядком

Ilia
12.03.2017
23:46:07
ммм, ну второй раз "определяя" этот метод я могу получить другой ответ?

Sergey
12.03.2017
23:46:26

Ilia
12.03.2017
23:46:57

Sergey
12.03.2017
23:46:58
если у тебя есть две реализации одного интерфейса, система не должна заметить что мы "подставили" другую реализацию вместо прежней
потому принцип и называется "принципом подстановки"

Ilia
12.03.2017
23:47:18
мне нужно загуглить LPS

Sergey
12.03.2017
23:47:39

Ilia
12.03.2017
23:48:28

Sergey
12.03.2017
23:49:15

Google

Ilia
12.03.2017
23:49:18

Sergey
12.03.2017
23:49:28
и объекты имеют контракты того как они обрабатывают сообщения и что возвращают
то есть тут нет полиморфизма)

Ilia
12.03.2017
23:50:43

Sergey
12.03.2017
23:50:44
просто разные методы совсем разных объектов

Ilia
12.03.2017
23:50:48

Sergey
12.03.2017
23:50:58
полиморфизм это когда поведение не меняется
меняется реализация

Ilia
12.03.2017
23:51:19

Admin
ERROR: S client not available

Sergey
12.03.2017
23:51:30
ну смотри, у тебя есть интерфейс Filesystem и у него есть метод readFile: File

Ilia
12.03.2017
23:51:55

Sergey
12.03.2017
23:52:37
и есть у тебя реализации аля LocalFilesystem и S3Filesystem
каждая из которых как возвращала тебе FIle так и будет возвращать.
разница лишь в том что в первом случае мы через простой fopen будем открывать стрим на чтение, а во втором лазать по сети и скачивать например файл в in-memory буфер какой
то есть так и так получим стрим на файл

Ilia
12.03.2017
23:53:44

Google

Sergey
12.03.2017
23:54:03
стандартизация?
что-то в этом духе. "Абстракция" скорее. Когда ты абстрагируешься от деталей.
у тебя есть "какая-то файловая система" и ты можешь читать файлы из нее. какая именно файловая система - тебе не интересно. Ты просто веришь в то что реализации этих файловых систем протестированы и делают то что тебе надо и причем одинаково

Ilia
12.03.2017
23:55:05
то есть получим тот же результат но допустим в "якобы"(отличающемся способе) от предыдущего без танцев с бубном(без доп. обработчика после использования метода)

Sergey
12.03.2017
23:55:27

Ilia
12.03.2017
23:55:32
все, я понял
:D

Sergey
12.03.2017
23:55:48
но это если что только полиморфизм подтипов
есть еще параметрический полиморфизм) и ad-hoc полиморфизм)

Ilia
12.03.2017
23:56:07
это еще что за дичь

Sergey
12.03.2017
23:56:39
https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC

Ilia
12.03.2017
23:56:51
уже чттаю

Sergey
12.03.2017
23:58:41
если кратко "параметрический полиморфизм" это дженерики всякие и шаблоны
а ad-hoc полиморфизм - это перегрузка методов например

Ilia
12.03.2017
23:59:10
могу захреначить каким-то боком кучу всего в один массив и отдать его кому-то другому разбираться например?

Sergey
12.03.2017
23:59:35

Ilia
12.03.2017
23:59:43
эм.... нипонял)
полиморфный тип: могу взять разные типы данных и поместить в массив(как пример)
квалифицированный... чет адское

Sergey
13.03.2017
00:01:58
перегрузку уже где-то слышал, это пооисходит один раз с созданным объектом?
не не... это когда у тебя 2 метода имеющих разные сигнатуры (разные аргументы) делают одно и то же. И тип в рантайме выбирается реализация исходя из сигнатуры сообщения. Пример - ну например тебе надо сумма. И ты можешь 2 аргумента иметь, можешь три, можешь массив чисел... результатом будет число. И у тебя будет три метода с одним и тем же названием но разными сигнатурами.
add(a: int, b: int): int;
add(a: int, b: int, c: int): int;
add(numbers: int[]): int;
в языках типа Objective-C всяких прикольно это реализовано

Ilia
13.03.2017
00:02:52
приведение к одному типу?

Sergey
13.03.2017
00:03:09
ну мол там у тебя add With a With b, add With a With c With c
а не просто add