Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Правильно ли используются принципы ООП

#c_sharp #ооп


Имеется абстрактный класс Фигура c абстрактными методами. Его наследует абстрактный
класс Фигура2D, которая определяет методы родителя.
К классу Фигура2D добавлены также виртуальные методы.

Вопросы: 
1) Нормально ли, что в абстрактном классе Фигура2D имеются методы с телом (методы
родителя, которые нужно реализовать) 
2) Нормально ли, что абстрактный класс имеет виртуальные методы (то есть класс является
одновременно полиморфным и абстрактным)

p.s.: Реализуется в c#
    


Ответы

Ответ 1



Да. Хотя лично я не припомню, чтобы видел иерархию наследования с двумя абстрактными классами. Вообще, чем дальше практикуешь ООП, тем больше предпочитаешь простые иерархии и композицию. Да. Абстрактный класс тем и отличается от интерфейса, что может содержать некоторое поведение по умолчанию, которое как раз и может содержаться в виртуальных методах.

Ответ 2



1) Нормально ли, что в абстрактном классе Фигура2D имеются методы с телом (методы родителя, которые нужно реализовать) Главное отличие интерфейса от абстрактного класса в том, что абстрактный класс может содержать не только объявление операции, но содержать и реализацию. При этом абстрактный класс может содержать не только виртуальные методы (объявление + реализация по умолчанию), но также может содержать и невиртуальные методы, которые определяют основу некоторого алгоритма, стабильного для всех подклассов, но с некоторым переменным шагом, который определяется конкретным наследником. За этим замысловатым описанием скрывается один из самых распространенных паттернов проектирования, под названием Шаблонный метод, который является фундаментальным для создания удобных в использовании иерархий типов. Выглядит он может так: abstract class Shape {} abstract class Shape2D : Shape { public void Draw() { DrawFirstPart(); DrawSecondPart(); FillShape(); } protected abstract DrawFirstPart(); protected abstract DrawSecondPart(); protected abstract FillShap(); } 2) Нормально ли, что абстрактный класс имеет виртуальные методы (то есть класс является одновременно полиморфным и абстрактным). Наличие конкретных методов в абстракном классе не делает его "конкретным" или "полиморфным". Любой абстрактный класс будет содержать реализацию, в противном случае вы бы использовали интерфейс.

Комментариев нет:

Отправить комментарий