powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Наследование и интерфейсы.
25 сообщений из 384, страница 4 из 16
Наследование и интерфейсы.
    #39720633
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123OFF
Агнец за бортомПочему? Наборот - чисто практический.ну это просто.
Практический вопрос это на ранг выше. Т.е. Предметка с именами сущностей в предметной области.
И зачем нужен класс поправленным интерфейсом.

Ваще не понял. Что "просто"?

Я ж написал - interface 15 методов.

Основной класс / модифицированный в одном методе.

Что тут обсуждать?
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720638
Igor Barchenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

SOLID — буква «L» в аббревиатуре означает Принцип подстановки Барбары Лисков (англ. Liskov Substitution Principle)
советую почитать.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor BarchenkoАгнец за бортом,

SOLID — буква «L» в аббревиатуре означает Принцип подстановки Барбары Лисков (англ. Liskov Substitution Principle)
советую почитать.вот вот....
+1.
Предлагаю про Практику, а не абстрактный 1 из 15, обсудить завтра.. на работе)
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720640
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor BarchenkoАгнец за бортом,

SOLID — буква «L» в аббревиатуре означает Принцип подстановки Барбары Лисков (англ. Liskov Substitution Principle)
советую почитать.

Читать вообще полезно. При чем тут это?

Petro123вот вот....
+1.
Почитал? )))
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720641
Igor Barchenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

при том что ты задачу применения DI решаешь полиморфизмом, что противоречит SOLID. Сделать можно, но потом искать эти костыли...
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720643
Igor Barchenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо тебе другое поведение - пиши новый класс, реализующий интерфейс. Пиши фабрику реализующую DI, а не лепи полиморфизм там где его не применять.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720645
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомПочитал? )))ну ты упрямый).
Я выше сказал предметку давай.
И ссылку я прочитал.
А ты только мячик кидаешь туда сюда.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720647
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомПо поводу формулировокВсе формулировки, что я использовал, относятся ТОЛЬКО к исходникам. ООП - это же про исходники.

Поэтому с точки зрения исходников
Агнец за бортом1. Наследник всё же реализует интерфейсэто неверно. Где код реализации в наследнике? Нет его, он в родителе. Однако, тип наследника - составной. Он состоит из интерфейса, реализованного родителем, интерфейса самого родителя и собственного интерфейса. Не считая вездесущего object :). Поэтому объект финального типа можно привести к любому типу, из которых он состоит.

К слову - набор собственных членов класса тоже называется интерфейсом (обобщающее название), и не нужно путать это название и интерфейс-элемент ООП и холиварить по этому поводу, мол у потомка нет реализованных интерфейсов. В TLB, например, собственный набор членов класса все равно описывается отдельным интерфейсом-элементом языка. Таким образом, "интерфейс класса" - это просто набор его публичных членов.

Да и "приведение типов" - условность. Никакого действия под названием "приведение" над объектом не происходит, приведение типов не компилируется в какие-то инструкции (по крайней мере в VB6), происходит лишь указание компилятору, методы какого интерфейса нужно дергать. Поэтому с точки зрения компилятора "наследник реализует интерфейс" - правда. С его точки зрения даже иерархии никакой нет - просто плоская таблица методов, обращение к которым идет по адресам (вернее смещениям), которые вычисляются на этапе компиляции, исходя из порядка объявления интерфейсов и их членов (опять же потроха VB6 описываю, дотнетовские слабо представляю). И вот с этого момента начинаются срачи - реализует/не реализует.

Граждане разработчики, а вы бинарники что ли пишете? Нет? Ну и не лезьте под руку компилятору, он в ООП разберется как сочтет нужным, а вы в лучше в исходниках не путайтесь и описывайте их на словах адекватно, чтобы слушатель не искал реализацию интерфейса в наследнике, которой там нет.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720649
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor BarchenkoАгнец за бортом,

при том что ты задачу применения DI решаешь полиморфизмом, что противоречит SOLID. Сделать можно, но потом искать эти костыли...

Не понимаю, ты не представляешь себе ситуации, где надо изменить _один_ метод у уже готовой реализации класса?

Многое зависит от того, что считать "поведением" программы. Его ты не знаешь. Что обсуждать? А выражать можно что угодно, через что угодно - смотря по ситуации.


Antonariyэто неверно. Где код реализации в наследнике? Нет его, он в родителе.
Ок.


AntonariyПоэтому с точки зрения компилятора "наследник реализует интерфейс" - правда.
Ок.

Вывод на самом деле "неожиданный". Фраза, которую я видел не то в приводимой выше ветке, не то где-то в нете - "если вы используете new - значит вы делаете что-то неправильно".

Самый ценный вывод из этой ветки.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720650
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyГраждане разработчики, а вы бинарники что ли пишете? Нет? Ну и не лезьте под руку компилятору,не согласен.
Говорит же компилятор что у абстрактного метода нет реализации в потомках.
Об этом и тема, моё имхо. Чтобы предупреждал).
А вот верна ли постановка - мало информации.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720651
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомНе понимаю, ты не представляешь себе ситуации, где надо изменить _один_ метод у уже готовой реализации класса?

Ну вообще, это закладывается. И методы, которые могут быть изменены закрывают внутри реализации и делают их virtual protected .

Заменить просто так работу какого-то метода... Ну это попахивает говнокодингом, при чём сильно.

Но если отмахнуться, и сказать, да мне типа пофигу, надо и всё. Ну если надо, делай типа копипаст, а какая разница-то? Если говнокодить, до уже пофигу как.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720654
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ООП - говно :):):)
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720655
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosООП - говно :):):)

Жизнь полна разочарований особенно для некоторых )
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720678
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЗаменить просто так работу какого-то метода...

Ога, прикинь? Или надо письмо разрабы писать, можно я унаследуюсь, мне там ерунда нужна.

Или у тебя опять флудо-генератор включился? Что характерно, к концу ветки - риск выставить себя дебилом ниже обычного; но знаешь, хвост, он ещё есть.)))
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720681
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С учетом вышеописанного, что сигнатуру базовых методов менять нельзя, но требуется использовать интерфейс IParantable - тогда я бы запулил шаблон Proxy . В 14 из 15 методах сделал бы вызов метода базового класса. В 15ом, требующем коррекции - запулил бы свою реализацию.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720682
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisВ 14 из 15 методах сделал бы вызов метода базового класса.
Мне вот интересно - чего ради вся эта писанина? Работа ради работы?

Из кейса ветки очевидных выхода два:

1. virtual/override (если есть доступ к базовому классу)
2. явное указание реализации интерфейса iParentable в классе-наследнике.

Минимум кода.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720683
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПоэтому с точки зрения исходников
Агнец за бортом1. Наследник всё же реализует интерфейсэто неверно. Где код реализации в наследнике? Нет его, он в родителе.
А что тогда по твоему в этом случае:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
interface ILamb
{
    void A();
    void B();
}

class LambOrdinary : ILamb
{
    public void A() => DoA();
    public void B() => DoB();

    protected virtual void DoA() => Console.WriteLine("Ordinary A");
    protected virtual void DoB() => Console.WriteLine("Ordinary B");
}

class LambOverboard : LambOrdinary
{
    protected override void DoB() => Console.WriteLine("Overboard B");
}


Наследник реализует, или не реализует, или частично реализует интерфейс?
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720685
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyГраждане разработчики, а вы бинарники что ли пишете? Нет? Ну и не лезьте под руку компилятору, он в ООП разберется как сочтет нужным, а вы в лучше в исходниках не путайтесь и описывайте их на словах адекватно, чтобы слушатель не искал реализацию интерфейса в наследнике, которой там нет.
Ты столкнулся с наследниками, в которых нет кода что-ли?

Адекватные граждане разработчики бастардов не клепают!
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720686
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Второй метод не катит. Увы.
авторОдни языки программирования (например, C++, C#) требуют явно указывать, что данный метод является виртуальным. В других языках (например, Java, Python) все методы являются виртуальными по умолчанию (но только те методы, для которых это возможно; например в Java методы с доступом private не могут быть переопределены в связи с правилами видимости).
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720688
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Второй метод не катит. Увы.

Что значит "не катит"? Компилятор в попапе пишет "no katit"?

авторВ других языках (например, Java, Python) все методы являются виртуальными по умолчанию
И как живут - беспредел же.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720692
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомИли надо письмо разрабы писать, можно я унаследуюсь, мне там ерунда нужна.дописать свой метод в наследнике...
Будет прямо по барбаре лисковой)))
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720693
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
Про компилятор я с тобой согласен.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720695
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомИ как живут - беспредел же."ты на святое покушаешься")))).
Вопрос, почему в шарпе как в дельфи у хуже чем в java надо было сразу в заголовке темы написать).
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720696
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомPallarisВ 14 из 15 методах сделал бы вызов метода базового класса.
Мне вот интересно - чего ради вся эта писанина? Работа ради работы?
Как тебе такой интерфейс: IBucket Methods ?

222 метода против твоих 15.

Задача: обернуть в Circuit Breaker .
Чтобы если дёргаешь метод бакета, а в этот момент Couchbase отвалился, то срабатывал предохранитель и приложение спокойно работало себе дальше.
...
Рейтинг: 0 / 0
Наследование и интерфейсы.
    #39720707
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортомPallarisВ 14 из 15 методах сделал бы вызов метода базового класса.
Мне вот интересно - чего ради вся эта писанина? Работа ради работы?

Из кейса ветки очевидных выхода два:

1. virtual/override (если есть доступ к базовому классу)
2. явное указание реализации интерфейса iParentable в классе-наследнике.

Минимум кода.


Минимум-то минимум, но чревато. Нужно четко понимать, что делаешь, и как код будет использоваться

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public interface IFoo
    {
        void A();
    }

    public class Foo : IFoo
    {
        public void A()
        {
            Console.WriteLine("Foo:A()");
        }
    }

    public class FooDerived : Foo, IFoo
    {
        void IFoo.A()
        {
            Console.WriteLine("FooDerived:A()");
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            IFoo a = new FooDerived();
            a.A(); //FooDerived:A()
            
            var b = (Foo) a;
            b.A(); //Foo:A()

            var c = (FooDerived) a;
            c.A(); //Foo:A()
        }
    }
...
Рейтинг: 0 / 0
25 сообщений из 384, страница 4 из 16
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Наследование и интерфейсы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]