Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»

Slides:



Advertisements
Similar presentations
Continuation of chapter 6…. Nested while loop A while loop used within another while loop is called nested while loop. Q. An illustration to generate.
Advertisements

EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
Английский язык. Настоящее совершенное длительное время.
ЗАРЯДКА НА АНГЛИЙСКОМ ЯЗЫКЕ.  Зарядка на уроке английского языка может стать самым любимым и веселым занятием для детей, при том, что она проходит исключительно.
ООП Классы. Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Астрометрические каталоги К.В.Куимов, ГАИШ МГУ. Определение астрометрического каталога Астрометрический каталог – понятие неопределённое. Например, это.
Разработка программного обеспечения (Software Engineering) Ian Sommervillle Часть 4. Реализация ПО: Проектирование с повторным использованием компонентов.
Автоматическая генерация кода программ с явным выделением состояний Канжелев С.Ю. магистрант СПбГУ ИТМО Шалыто А.А. доктор технических наук профессор СПбГУ.
Дипломная работа Ивановой О.О., группа 545 Научный руководитель: д. ф.-м. н., профессор Терехов А.Н. Генерация кода по диаграмме активностей.
Системы отбора. Условные обозначения (1) (2) (3) (4) (5) (6) (7) Математическое моделирование процессов отбора2.
ЛОМОНОСОВ И МАТЕМАТИКА. Большое значение Ломоносов придавал математике, рекомендуя широко применять математические методы в других науках. Математику,
Савенко Мария Олеговна, 361 группа Научный руководитель: старший преподаватель В.С.Полозов.
Тел. (495) Москва, а/я 212 Рабочая группа по реформе МВД Москва, 2010 Новикова Асмик, Фонд «Общественный вердикт»
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
Стресс и здоровье Презентация Нефёдовой Евгении Николаевны, классного руководителя 9 «Б» класса МОУ СОШ № 30 города Энгельса Саратовской области 2010 год.
Bank ownership and lending behavior Alejandro Micco, Ugo Panizza Politicians and banks: Political influences on government-owned banks in emerging markets.
Учитель математики Кулакова Т.М. МОУ ООШ №15 г.о Новокуйбышевск Самарской области Сентябрь 2011г.
ЭЛЕКТРОННЫЙ ХРОНОМЕТРАЖ Докладчики : Чуранов В. Л. ( Вологда ) Цапилов Н. В. ( Рыбинск )
Оценка уровня развития базовых способностей обучающихся
Приложение 3.1. (3.30) (П3.1.-1) (П3.1.-2) (П3.1.-3) (П3.1.-4) (3.31)
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Делегаты. Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Блок 3. Семейства белков I. Множественное выравнивание Первый курс, весна 2008, А.Б.Рахманинова.
Особенности Java. Блок static static { } Создание и уничтожение объектов  new – создание объекта  finalyze()
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
1 Генерация контекстных ограничений для баз данных Выполнил: Жолудев В. Научный руководитель: Терехов А.Н. Рецензент: Иванов А.Н.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Анатомия класса. Схожесть с др. языками   С# похож на язык Java в том, что он требует, чтобы вся программная логика была заключена в определения типов.
Основы цифровой обработки речевых сигналов. Общая схема процесса речеобразования x[n] – дискретные отсчеты сигнала возбуждения y[n] – дискретные отсчеты.
Ввод-вывод в C# Сериализация.
Growing Neural Gas Method Нейросетевой метод построения неструктурированных адаптивных сеток.
Сравнение различных методов хранения XML в реляционных базах данных и в разных системах. Нгуен Тхань Хуен- 545 группа Руководитель : Б.А. Новиков Рецензент:
 Нужно много различных протоколов связи  Каждый из них может реализовываться на разных платформах Современные сети Много устройств, компьютеров и сетей.
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
Контейнеры. Сортировка  Метод sort()  Интерфейс Comparable метод int compareTo(Object o) вызов: Arrays.sort(a)  Интерфейс Comparator метод int compare(Object.
Синтаксис языка Java.
Универмаги в большей степени, чем специализированные магазины заинтересованы в поддержании своей репутации. Как данный фактор может повлиять на систему.
Особенности языка JavaScript и его использования.
PowerPoint Presentation for Dennis, Wixom & Tegardem Systems Analysis and Design Copyright 2001 © John Wiley & Sons, Inc. All rights reserved. Slide 1.
Кураева Екатерина Анатольевна, заместитель директора по УВР, учитель математики сш № 29.
Чем объясняется факт существования во многих странах мира практики обязательного медицинского страхования?
Коллекции. Пространство имен System.Collections Наиболее простой вариант набора элементов — это массив System. Array. Он уже обладает весьма полезными.
События. События Важная роль делегатов заключается в том, что на них основана модель событий С#. Применение событий вовсе не ограничено приложениями с.
1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В. Java 2 Micro Edition Лаборатория информационных технологий (ИТЛаб) При поддержке фирмы.
1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В. Java 2 Micro Edition Лаборатория информационных технологий (ИТЛаб) При поддержке фирмы.
ВВЕДЕНИЕ В ВЫЧИСЛИТЕЛЬНУЮ МАТЕМАТИКУ Лекция 5 6 октября 2009 ВЫЧИСЛИТЕЛЬНАЯ ЛИНЕЙНАЯ АЛГЕБРА.
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Пакет java.lang, синтаксический «сахар», родовые компоненты.
XML - расширенный язык разметки Моисеевой О. Макушиной Д. (eXtensible Markup Language)
Множественное выравнивание С.А.Спирин, весна
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Средства ООП Java.
Visual Basic 7 Объектно-ориентированный язык программирования.
1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В. Java 2 Micro Edition Лаборатория информационных технологий (ИТЛаб) При поддержке фирмы.
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
«Отгадай символы Рождества»
Нескучное тестирование с pytest
Board Games. KnowWant to knowLearnt jigsawpuzzle adominoesyrw cfeukoloased hdscrabbleja eetashiefyjr sfmarblesaet sokbilliards ybackgammonu.
Writing Friendly Letters A Write On Activity. Friendly letters have five parts: 1. The Heading 2. The Salutation (greeting) 3. The Body (some paragraphs)
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ Metro приложения: работа с данными Краковецкий Александр, MVP/RD/PhD. DevRain Solutions.
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(“two"); lst.add(“three");
Anekdot ANDROID CLUB Сегодня  Navigation Drawer  CardView  Calligraphy  TextToSpeech.
Activity ANDROID CLUB Сегодня  Основные компоненты Android  Activity  Layout для Activity  Создание Activity  Launcher Activity  Activity.
Опыт Технопарка БНТУ по разработке проектной заявки Что скрывает CBHE? Томашевич Наталия Юрьевна Руководитель Центра МНТС Научно-технологический парк БНТУ.
Jokes Jokes Jokes Teacher: Where's your text book? Student: At home. Teacher: What's it doing there? Student: Having a.
Управление виртуальной инфраструктурой Hyper-V и Virtual Server
Сетевое взаимодействие
* Любой табак кроме WTO Депозит берется в течение 20 мин, как подошли все гости* В депозит входят все позиции в меню* Депозит не возвращается*
10 интересных фактов о Японии и Японцах. В состав Японии входит островов. При этом четыре наиболее крупных из них - Кюсю, Хонсю, Хоккайдо и Сикоку,
Presentation transcript:

Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»

Наследование = расширение возможностей.

В чём разница?  «Быть - классическое наследование, is a» Каждый производный класс расширяет возможности базового.  «Иметь – включение- делегирование, has a» Класс объявляется внутри другого, который разрешает с помощью своих методов использовать возможности вложенного

Полиморфизм. Одинаковый интерфейс – разные действия.  Классический. public class Target : Object { public virtual void SelfDestruction() {…} } public class AirTarget : Target { public override void SelfDestruction() {…} } Target t = new Target(); AirTarget at = new AirTarget(); t.SelfDestruction(); at.SelfDestruction();  Полиморфизм для конкретного случая («ad-hoc», «позднее связывание – определение вызываемого метода в ходе выполнения»). Target a1 = new AirTarget(), a2 = new Airship(); a1.SelfDestruction(); a2.SelfDestruction(); Тип объекта может определяться динамически, соответственно «на ходу» определяется вызываемый метод.

А теперь подробнее…

Наследование.Классическое  Базовые классы определяют общую функциональность всех производных.  Производные классы расширяют функциональность за счёт своих методов.  Наследуются только открытые методы.  Указатель на базовый класс выглядит как «:» - и при определении производного, и при обращении к конструктору базового в производном.  Множественное наследование невозможно!!!

public class A { public A(A_Params) {…} } public class B : A { public B(B_params) : base (A_Params) {…} } public Manager(string Name,int ID,int Section ) : base (Name, ID) { … }

Семейные тайны и запреты.  Можно запретить внешний вызов метода, объявив его как protected. При этом он будет считаться видимым для всех наследуемых, но недоступным извне.  Можно вообще запретить наследование, объявив класс как sealed. Например, для запрета наследования за пределами сборки. public sealed class LostClass : SomeClass { … }

Модель включения- делегирования.  Класс-контейнер – родительский.  Внутренний класс – дочерний.  Ответственность за жизнеспособность внутреннего класса несёт внешний. Делегирование «полномочий».  Пользователь может и не подозревать о существовании внутреннего класса, вызывая методы «опекуна».

Как это происходит… Само наследование: public class Car { … private Radio musicBox; public Car () { musicBox = new Radio(); } Или public class Car { … private Radio = new musicBox(); };  Делегирование public class Car { … public void TurnOnRadio() { … musicBox.TurnOn(); }

И ещё – вложенные (nested) классы.  Исключительно вспомогательные функции.  Невозможно обращение извне.  Строгий контроль области видимости.  Почти то же самое, что модель включения-делегирования.  Можно вкладывать классы, интерфейсы и структуры.

public class Car { … private class Radio { public Radio() { … } public void TurnOn() { … } private Radio musicBox; public void TurnOnRadio() { musicBox.TurnOn(); }

Полиморфизм («не совсем» перегрузка!).  Задача – заставить один и тот же метод (метод с одинаковым прототипом) по- разному реагировать на объекты разных классов.  В замещённых версиях методов, как правило, расширяется функциональность метода базового класса.  Метод базового класса, который должен быть замещён в производном, объявляется как virtual.  Метод производного класса, который должен замещать виртуальный метод базового класса, должен быть объявлен как override.

public class Target {... public virtual void Selfdestruction() {... } public class AirTarger : Target {... public override void SelfDestruction() { base.SelfDestruction();... }

Это далеко не всё!  Абстрактные классы – запрет на создание объектов «самого базового» класса.  Принудительный полиморфизм – абстрактные методы.  Контроль версий членов класса (versioning).  Приведение типов.

Абстрактные классы.  Абстрактные классы позволяют запретить создание объектов некоторого класса. abstract public class MainBaseClass { … } Не обязательно наличие чисто виртуальных методов.

Абстрактные (чисто виртуальные) методы  Только в абстрактных классах.  Обязательно должны быть замещены.  Незамещённые виртуальные методы будут вызваны из базовой версии.  Чтобы объявить метод абстрактным, достаточно не указывать его реализацию.  Незамещённый абстрактный метод таким и останется в производном классе, со всеми вытекающими последствиями.

Вся мощь полиморфизма public abstract class Target {… public virtual void SelfDestruction(); } public class AirTarget : Target {… public override void SelfDestruction() {…} } public class LandTarget : Target {-”-} public class SeaTarget : Target {-”-} public class MainClass {… public static int Main (string[] args) {… Target[] targets = {new AirTarget(), new Landtarget(), new SeaTarget()}; for (int i=0;i<targets.Lenght;i++) targets[i].SelfDestruction(); }

Контроль версий членов классов.  Разрыв отношений на уровне одного метода – достаточно объявить метод как new.  Сокрытие методов.  Запрет наследования логики базовых версий.  Вызов варианта базового класса с помощью явного приведения типа.  Используется при межъязыковом наследовании, например.

Приведение типов.  Если один класс является производным от другого, то всегда безопасно ссылаться на объект производного класса через объект базового класса.  …