@oop_ru

Страница 347 из 785
I
27.09.2017
07:26:09
Подскажите паттерн пожалуйся. Режу старый класс на фунциональности. Каждая функциональность добавляет метод к интерфейсу (наследование) и расширяет существующий метод (похоже на Decorator). Но комбинировать декоратор с наследованием не получится, потому что декоратор не будет иметь доступ к внутренностям

т.е. декоратор должен вызывать какой-то protected метод базового объекта... (с++)

Evgeniy
27.09.2017
07:31:57
т.е. декоратор должен вызывать какой-то protected метод базового объекта... (с++)
нет, он должен до вызова метода и после что то сделать по своему желанию, насколько я помню, а не вызывать именно протектед метод у родителя

какой то вопрос слишком непонятный

Google
Evgeniy
27.09.2017
07:34:02
и яп сразу укажи)

I
27.09.2017
07:36:48
1. базовый объект - state машина (режимы соединен/разъединен: методы connect(), disconnect()) disconnect() что-то делает внутри. 2. класс расширения -Трейсинг в файл. добавляет метод LogToFile(). К disconnect() надо добавить flus().

добавить вызвов flush()

Evgeniy
27.09.2017
07:38:33
а яп какой?

сделаю через обычную агрегацию, могу что на java что на пхп написать

Anatoly
27.09.2017
07:39:10
в твоем случае класс расширения декоратор, только не надо расширять его интерфейс

I
27.09.2017
07:39:35
хочу всю функциональность разбить на класс и чтобы можно было наследовать в произвольном порядке

на классы

Evgeniy
27.09.2017
07:42:49
на пыхе но переписать под любой яп можно

https://pastebin.com/gnS2H63g

Google
I
27.09.2017
08:04:36
Покажи

Evgeniy
27.09.2017
08:05:31
ссылка выше

Anatoly
27.09.2017
08:05:45
https://pastebin.com/gnS2H63g
в чистом виде декоратор

Evgeniy
27.09.2017
08:06:02
просто показал декоратор без наследования

а через агрегацию

во многих книгах его показывают именно через наследование

и люди думают что только так и можно

Anatoly
27.09.2017
08:08:18
и так и так декоратор :)

Evgeniy
27.09.2017
08:09:10
это да я не хочу ему другое название дать, просто не хотел человеку мозг ломать, что делай через декоратор и вместо наследования юзай агрегацию

не факт что понятно бы ответил, а так человек видит код, понимает как делать и юзать, а потом случайно название узнал)

Anatoly
27.09.2017
08:14:02
ok, примеры они всегда полезнее слов

Evgeniy
27.09.2017
08:15:43
жду когда спс скажут ну или вопросы зададут как еще одну функциональность добавить)

andretshurotshka?❄️кде
27.09.2017
08:17:49
Трейты?)

Evgeniy
27.09.2017
08:20:06
потом запаришься их рефакторить)

хотя дело вкуса все

и в scala они вполне норм)))

Sergey
27.09.2017
08:33:57
наследования какие-то, функциональность расширяет интерфейс... если у тебя наследник добавляет новый метод - это никакой не паттерн, это использование наследования там где стоило юзать композицию/агрегацию.

причем непонятно зачем там наследование раз новые методы плождятся - это должно подсказывать что это все просто разные штуки

Google
Sergey
27.09.2017
08:35:36
ну или я просто ничего не понял

Evgeniy
27.09.2017
08:35:50
ну или я просто ничего не понял
я тоже по началу ничего не понял

пока его неспросили про практический пример)

Sergey
27.09.2017
08:36:11
не могу найти

на пейстбине который7

Evgeniy
27.09.2017
08:42:42
да

я набрасал ему решение)

I
27.09.2017
08:45:33
Похоже нарушил

Можно применить паттерн Шаблонный метод. Метод базового класса будет вызывать виртуальный метод определенный в наследующем классе tracing_flush(). Но при этом базовый класс должен предполагать какая функциональность должна быть добавлена и надо на каждую функциональность добавить шаблонных методов

Aleh
27.09.2017
09:05:33
шаблонный метод такая себе идея, потому что подразумевает наследование)

Evgeniy
27.09.2017
09:15:33
ну человек хочет жить по патернам, а не по здравому смыслу)

паттерны ради паттернов

это определенный этап становления программиста

I
27.09.2017
11:59:30
блин pidgin telegram мне половину сообщений не доставил

Спасибо за пример. Сейчас пытаюсь разобраться

яп с++

Sergey
27.09.2017
12:03:46
ну в плюсах же можно замутить полностью абстрактный класс и юзать его как интерфейс

I
27.09.2017
12:08:25
да для меня это ново. паттерны только потому чтобы повторно использовать код без правки. (а велосипеды писать - скорее всего ошибешься)

I
27.09.2017
12:22:16
Декоратор с агрегированием - там расширять можно только последний класс, да?

Google
I
27.09.2017
12:24:45
ну вот из примера https://pastebin.com/gnS2H63g , если я оберну еще одним декоратором то не будет доступа к расширеному функционалу (методы flushtofile())

Aleh
27.09.2017
12:25:28
декорируя ты должен расширять фичастость не меняя интерфейс, желательно

I
27.09.2017
12:26:03
либо этот декоратор должен иметь такой же расширенный интерфейс и транслировать дальше. вообщем муть выходит

наверно надо по максимуму вынести во внешние классы

andretshurotshka?❄️кде
28.09.2017
12:52:20
Переопределение метода с super это наследование реализаций?

живые?)

:(

F01134H
28.09.2017
13:16:29
Шта

Игорь
28.09.2017
21:00:47
ку. Мне вот любопытно. Я на C# конечно не особо глубоко шарю.. приходится иногда по мелочи писать.. На счет паттерна Observer. В джаве же к примеру нет ни делегатов, ни ивентов, все как бы руками… потому обсервер в принципе как выход из положения для того чтобы триггерить разные события или подписываться на них - хороший выход. Но вот в си шарпе, нужна ли классическая реализация осбервера? я смотрю что вполне подобную логику мучу через подписку на нужные ивенты без оверинженеринга в плане наследования классов от обсервера и обсервабле.. что скажете? это так, просто теоретический момент.. любопытно..

Игорь
28.09.2017
21:04:00
вообще я на си шарп сначала блевался… а ща смотрю весьма грамотно все. Можно описывать свои геттеры/сеттеры для каждого поля, или же запрещать чтение или установку конкретного поля. И не нужно тулить кучу методов геттеров/сеттеров как в джаве.

Adel
28.09.2017
21:06:01
сишарп - самый божественный ооп язык

Игорь
28.09.2017
21:11:44
я вообще писал на С++ еще давно когда-то немного, там еще когда только апрувили стандарт С++11

Страница 347 из 785