Справочник от Автор24
Поделись лекцией за скидку на Автор24

Немного об абстракциях

  • 👀 286 просмотров
  • 📌 234 загрузки
Выбери формат для чтения
Загружаем конспект в формате pptx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Немного об абстракциях» pptx
Лекция 5. Немного об абстракциях Абстрактный класс Интерфейс Вспомним о классе Класс — это некое множество объектов, имеющих общую ст рукт уру и общее поведение. Г. Буч Абстрактный класс Класс, имеющий хотя бы один абст ракт ны й метод, называется абстрактным. type TShape = class private FPoints : TList; public function GetSquare:real; virtual; abstract; end; может быть перегружен в классахнаследниках не имеет реализации в данном классе Зачем нужен абстрактный класс? • Позволяет выделить общую структуру • Позволяет выделить общие аспекты поведения • Оперируем похожими объектами, не зная деталей их устройства • Определяем аспекты поведения на стадии выполнения Оперируем похожими объектами var duck:TDuck; // объект абстрактного класса for i:=0 to (Ducks.Count–1) do begin duck:=Ducks[i]; // уже не абстрактная, но реальная утка duck.swim; // однако она обладает методами duck.fly; // абстрактной утки end; Это все утки — а значит, они могут плавать и летать! А наша duck — полиморфна. Определяем аспекты поведения на стадии выполнения var duck:TDuck; // объект абстрактного класса begin duck:=Pool.CatchRandomDuck; // ловим утку наугад writeln(‘We catched ’+duck.Name); duck.swim; duck.fly; end; Каждая утка летает и плавает посвоему. Мы не знаем, как именно поведет себя пойманная утка. Снова полиморфизм ;) Наследование абстрактного класса Ничем не отличается от обы чного наследования. Не забудьте перегрузить и реализовать методы, чтобы наследник не был абстрактным! type TMyDuck = class(TDuck) protected procedure fly; override; // без директивы abstract procedure swim; override; // реализация необходима! end; Интерфейс Абстрактные классы — отличное решение для обобщения общих свойств и поведения! Зачем изобретать что-то еще? Интерфейс • Класс, не имеющий ст рукт уры , все методы которого являются абст ракт ны ми. • Договор на реализацию некоторых методов. • Способ описать, какими должны быть ваши классы. Интерфейс type IPrintable = interface procedure Preview(xsize,ysize:integer); procedure Print(printer : IPrinter); end; Для печати нужен какой-либо принтер, он также передается в виде интерфейса Интерфейс Необходимо наследовать, чтобы реализовать интерфейс Наследуем самому интерфейсу type TMyDoc = class(TInterfacedObject, IPrintable) private function CheckFields : boolean; public procedure Fill(Parameters : TDocParams); procedure Preview; procedure Print(printer : IPrinter); end; Объявление и реализация необходимы! Что это дает? • Возможность выделить поведение, характерное для каких-либо групп объектов • Возможность регламентировать поведение • Определение общих алгоритмов на основе интерфейсов • Создание кода, работающего с классами, которые еще только будут созданы Интерфейс Получается, что интерфейс является, по сути, абстрактным классом. Зачем же выделять отдельное понятие? Множественное наследование интерфейсов IEditable IPrintable Cut Copy Delete Preview Print TMyDoc FParams:TList Preview Print Cut Copy Delete Множественное наследование интерфейсов. Проблема IPrintable IEditable Preview Print Copy Cut Copy Delete TMyDoc FParams:TList Preview Print Cut Copy Delete Решение 1: Запрет на реализацию интерфейсов с одинаковыми сигнатурами методов IPrintable IEditable Preview Print Copy Cut Copy Delete TMyDoc FParams:TList Preview Print Cut Copy Delete Решение 2: Явное разрешение неоднозначности IPrintable IEditable Preview Print Copy Cut Copy Delete TMyDoc FParams:TList Preview Print Cut IPrintable.Copy IEditable.Copy Delete Решение 3: Общая реализация одноименных методов IPrintable Preview Print Copy IEditable Cut Copy Delete IPrintAndEditab le TMyDoc FParams:TList Preview Print Cut Copy Delete Preview Print Cut Copy Delete Контрольные вопросы • Что такое абстрактный класс? • Зачем нужны абстрактные классы? • Является ли интерфейс абстрактным классом? • Как решается проблема множественного наследования для интерфейсов?
«Немного об абстракциях» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot