Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консультация Кузьминой Т.М..docx
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
346 Кб
Скачать
☆

10/ Полиморфизм. Примеры реализации полиморфизма.

Полиморфизм

Полиморфизм (polymorphism) (от греческого polymorphos) - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. Например для языка Си, в котором полиморфизм поддерживается недостаточно, нахождение абсолютной величины числа требует трёх различных функций: abs(), labs() и fabs(). Эти функции подсчитывают и возвращают абсолютную величину целых, длинных целых и чисел с плавающей точкой соответственно. В С++ каждая из этих функций может быть названа abs(). Тип данных, который используется при вызове функции, определяет, какая конкретная версия функции действительно выполняется. В С++ можно использовать одно имя функции для множества различных действий. Это называется перегрузкой функций (function overloading).

В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий. Преимуществом полиморфизма является то, что он помогает мнижать сложность программ, разрешая использование того же интерфейса для задания единого класса действий. Выбор же конкретного действия, в зависимости от ситуации, возлагается на компилятор. Вам, как программисту, не нужно делать этот выбор самому. Нужно только помнить и использовать общий интерфейс. Пример из предыдущего абзаца показывает, как, имея три имени для функции определения абсолютной величины числа вместо одного, обычная задача становится более сложной, чем это действительно необходимо.

Полиморфизм может применяться также и к операторам. Фактически во всех языках программирования ограниченно применяется полиморфизм, например, в арифметических операторах. Так, в Си, символ + используется для складывания целых, длинных целых, символьных переменных и чисел с плавающей точкой. В этом случае компилятор автоматически определяет, какой тип арифметики требуется. В С++ вы можете применить эту концепцию и к другим, заданным вами, типам данных. Такой тип полиморфизма называется перегрузкой операторов (operator overloading).

Ключевым в понимании полиморфизма является то, что он позволяет вам манипулировать объектами различной степени сложности путём создания общего для них стандартного интерфейса для реализации похожих действий.

Полиморфи́зм (от греч. πολὺ- — много, и μορφή — форма) в языках программирования — возможность объектов с одинаковой спецификацией иметь различную реализацию.

Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1].

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием).

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение:

внешняя общность проявляется как эквивалентный набор методов с одинаковыми именами или совпадающими сигнатурами (именами методов, типами аргументов и их количеством);

внутренняя общность — одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (перегрузкой функций, перегрузкой операций).

Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1]. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием). Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение: внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именем методов и типами аргументов и их количеством); внутренняя общность — одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (перегрузкой функций, перегрузкой операций).

Полиморфизм для начинающих

PHP*

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

Постановка задачи

Предположим, на сайте нужны три вида публикаций — новости, объявления и статьи. В чем-то они похожи — у всех них есть заголовок и текст, у новостей и объявлений есть дата. В чем-то они разные — у статей есть авторы, у новостей — источники, а у объявлений — дата, после которой оно становится не актуальным.

Самые простые варианты, которые приходят в голову — написать три отдельных класса и работать с ними. Или написать один класс, в которым будут все свойства, присущие всем трем типам публикаций, а задействоваться будут только нужные. Но ведь для разных типов аналогичные по логике методы должны работать по-разному. Делать несколько однотипных методов для разных типов (get_news, get_announcements, get_articles) — это уже совсем неграмотно. Тут нам и поможет полиморфизм.

Абстрактный класс

Грубо говоря, это класс-шаблон. Он реализует функциональность только на том уровне, на котором она известна на данный момент. Производные же классы ее дополняют. Но, пора перейти от теории к практике. Сразу оговорюсь, рассматривается примитивный пример с минимальной функциональностью. Все объяснения — в комментариях в коде.

abstract class Publication

{

// таблица, в которой хранятся данные по элементу

protected $table;

// свойства элемента нам неизвестны

protected $properties = array();

// конструктор

public function __construct($id)

{

// обратите внимание, мы не знаем, из какой таблицы нам нужно получить данные

$result = mysql_query ('SELECT * FROM `'.$this->table.'` WHERE `id`="'.$id.'" LIMIT 1');

// какие мы получили данные, мы тоже не знаем

$this->properties = mysql_fetch_assoc($result);

}

// метод, одинаковый для любого типа публикаций, возвращает значение свойства

public function get_property($name)

{

if (isset($this->properties[$name]))

return $this->properties[$name];

return false;

}

// метод, одинаковый для любого типа публикаций, устанавливает значение свойства

public function set_property($name, $value)

{

if (!isset($this->properties[$name]))

return false;

$this->properties[$name] = $value;

return $value;

}

// а этот метод должен напечатать публикацию, но мы не знаем, как именно это сделать, и потому объявляем его абстрактным

abstract public function do_print();

}

Производные классы

Теперь можно перейти к созданию производных классов, которые и реализуют недостающую функциональность.

class News extends Publication

{

// конструктор класса новостей, производного от класса публикаций

public function __construct($id)

{

// устанавливаем значение таблицы, в которой хранятся данные по новостям

$this->table = 'news_table';

// вызываем конструктор родительского класса

parent::__construct($id);

}

// переопределяем абстрактный метод печати

public function do_print()

{

echo $this->properties['title'];

echo '<br /><br />';

echo $this->properties['text'];

echo '<br />Источник: '.$this->properties['source'];

}

}

class Announcement extends Publication

{

// конструктор класса объявлений, производного от класса публикаций

public function __construct($id)

{

// устанавливаем значение таблицы, в которой хранятся данные по объявлениям

$this->table = 'announcements_table';

// вызываем конструктор родительского класса

parent::__construct($id);

}

// переопределяем абстрактный метод печати

public function do_print()

{

echo $this->properties['title'];

echo '<br />Внимание! Объявление действительно до '.$this->properties['end_date'];

echo '<br /><br />'.$this->properties['text'];

}

}

class Article extends Publication

{

// конструктор класса статей, производного от класса публикаций

public function __construct($id)

{

// устанавливаем значение таблицы, в которой хранятся данные по статьям

$this->table = 'articles_table';

// вызываем конструктор родительского класса

parent::__construct($id);

}

// переопределяем абстрактный метод печати

public function do_print()

{

echo $this->properties['title'];

echo '<br /><br />';

echo $this->properties['text'];

echo '<br />© '.$this->properties['author'];

}

}

Теперь об использовании

Суть в том, что один и тот же код используется для обьектов разных классов.

// наполняем массив публикаций объектами, производными от Publication

$publications[] = new News($news_id);

$publications[] = new Announcement($announcement_id);

$publications[] = new Article($article_id);

foreach ($publications as $publication) {

// если мы работаем с наследниками Publication

if ($publication instanceof Publication) {

// то печатаем данные

$publication->do_print();

} else {

// исключение или обработка ошибки

}

Линг – лингвистическое и программное обеспечение САПР(1 часть)

1/ В каком случае мы говорим, что конечный детерминированный автомат с магазинной памятью принимает (распознает) язык L?

2/ В каком случае мы говорим, что конечный детерминированный автомат принимает (распознает) язык L?

3/ Как определяется конечный детерминированный автомат? Как он работает?

4/ Дать определение формальной грамматики. Приведите пример грамматики.

5/ Пояснить, что такое цепочка, сентенциальная форма, предложение, язык.

6/ Дана грамматика G=<VT, VN, P, S>

V = {a,b,c} V = {S, B, C} S=S

P:S  aSBC

S  abC

CB BC

bB  bb

bC bc Определить язык L(G),

cC cc порождаемый этой грамматикой

7/ Перечислите основные типы грамматик по классификации Хомского. Какому типу соответствуют алгоритмические языки?

8/ Что такое регулярные (автоматные) грамматики? Какие типы распознающих устройств используются для распознавания регулярных грамматик?

9/ Что такое форма бэкуса - наура? Перечислите основные символы бнф и правила работы с ними?

10/ В чем состоит задача синтаксического анализа? Что такое синтаксические деревья? Каким образом они строятся?

11/ Какие две основные стратегии синтаксического разбора вы знаете? В чем состоит основная проблема разбора?

12/ Какие внутренние формы представления исходной программы вы знаете? В чем особенность каждой из этих форм?

13Дано выражение: м(р-м*д) + а/2 2*а-4 записать в виде польской записи.

14/ Как определяется конечный детерминированный автомат с магазинной памятью? Как он работает?

15/ Дано выражение: (а+вс-к/р)/97+ад . Записать в виде последовательности тетрад.

16/ В чем состоит назначение лексического анализатора?

17/ Поясните следующие понятия: транслятор, компилятор, интерпретатор.

Пр.об. – лингвистическое и программное обеспечение САПР(2 часть)

1/ Односвязные кольцевые и не кольцевые списки.

2/ Двухсвязные кольцевые и не кольцевые списки.

3/ Частные виды списков: стек и очередь.

4/ Дерево сортировки. Пример построения дерева сортировки по заданному набору ключей.

5/ Деревья. Примеры использования.

6/ Прямой обход дерева. Пример.

7/ Обратный обход дерева. Пример.

8/ Бинарное дерево. Примеры.

9/ Симметричный обход дерева. Пример.

10/ Дерево сортировки. Пример построения дерева сортировки по заданному набору ключей.

ИИ – интилектуальные системы САПР

1/ Дано дерево пространства состояний:

Написать дерево просмотра вершин методом «в ширину», если целевая вершина имеет номер 15.

2/ Исходные данные: a=true, b=true. Целевая функция g. Набор продукций:

  1. IF ~c AND b THEN d=true

  2. IF c THEN k=true

  3. IF a AND b THEN c=false

  4. IF d THEN g= «Цель достигнута»

В какой последовательности будут рассматриваться продукции при прямом выводе решений?

3/ Дано дерево пространства состояний:

Написать дерево просмотра вершин методом «в глубину», если целевая вершина имеет номер 15.

4/ Предикат р(x,y) соответствует отношению: «х больше или равно у». Область интерпретации состоит из трех чисел: 1,2,3. Какое значение истинности имеют следующие формулы: а) ""у p(3,у) б)  ($$xp(x,x))

5/ С помощью метода резольвенций доказать логическое следование теоремы k(x) из аксиом k(y)q(y); k(z)p(z); (k(y)~q(y)~p(y)).

6/ С помощью таблиц истинности докажите справедливость утверждения: ав  ~ а  b

(или Мат. логика)

7/ Какая модель представления знаний называется продукционной? В чем ее достоинства и недостатки?

8/ Используя метод резольвенций, доказать логическое следование теоремы уq(f(y)) из аксиом: x(p(x)q(x)); yp(f(y)).

9/ Предикат р(х,у) соответствует отношению: х=у2. Область интерпретации состоит из чисел:1,2,0,-4. Какое значение истинности имеют следующие формулы: а) ""у р(4,у) б) $$у p(1,у) в) ""х р(х,5)

10/ Дано: продукционная база знаний: w - целевая переменная. Построить соответствующий и -или граф. R1 if: m & b then: w= «значение 1» R2 if: not m then: w= «значение 2» R3 if: v>90 then: m = true R4 if: v<90 & not onl then: m = true R5 if: not b & m then: w= «значение 3» R6 if: onl then: m = false

11/ Дано: исходные данные: а= true, в= true целевая переменная -g. Набор продукций: 1) if c or b then d= true 2) if a & b then c= false 3) if d then g = «цель достигнута» В какой последовательности будут рассматриваться продукции при обратном выводе решений?

КГ – компьюторная графика.

1/ Что такое пиксель? Что такое разрешающая способность графической системы? Как обозначается разрешающая способность графической системы?

2/ Что такое палитра? От чего зависит количество цветов в палитре?

3/ Чем занимается машинная графика?

4/ Растровая и векторная графика. Достоинства и недостатки.

5/ Какой примитив в векторной графике представляется уравнением y=kx+b?

6/ Какими свойствами обладает объект в графической системе AutoCAD?

7/ Масштабирование графических изображений в графической системе АutоСАD.

8/ Аффинные преобразования на плоскости. Свойства аффинных преобразований.

9/ Сравните построение отрезка в АutоСАD и в Си –программе.

10/ Простейшие аффинные преобразования на плоскости. Приведите математические формулы.

14/ Понятие цвета в компьютерной графике. Управление цветом в Си программах. Цвет как свойство графических объектов в АutоСАD.

15/ Построение окружности в Си- программе и в графической системе АutоСАD. Сравните методы.

16/ Понятие примитивов в векторной графике. Состав примитивов и их свойства в среде АutоСАD.

17/ Основные свойства и особенности полилиний в графической системе AutoCAD.

18/ Геометрические модели 3d составных объектов.

19/ Что такое кривые Безье в векторной графике?

20/ Чем занимается геометрическое моделирование?

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

22/ Основы трехмерного моделирования в компьютерной графике.

23/ Общие понятия о кривых второго порядка и их назначении на примере графической системы AutoCAD.

24/ Разработка чертежа на плоскости. Общие понятия и определения.

  1. Что такое пиксель? Что такое разрешающая способность графической системы? Как обозначается разрешающая способность графической системы?

  2. Что такое палитра? От чего зависит количество цветов в палитре?

  3. Чем занимается машинная графика?

  4. Растровая и векторная графика. Достоинства и недостатки.

  5. Какой примитив в векторной графике представляется уравнением y=kx+b?

  6. Какими свойствами обладает объект в графической системе AutoCAD?

  7. Масштабирование графических изображений в графической системе АutоСАD.

  8. Аффинные преобразования на плоскости. Свойства аффинных преобразований.

  9. Сравните построение отрезка в АutоСАD и в Си –программе.

  10. Понятие цвета в компьютерной графике. Управление цветом в Си программах. Цвет как свойство графических объектов в АutоСАD.

  11. Построение окружности в Си- программе и в графической системе АutоСАD. Сравните методы.

  12. Понятие примитивов в векторной графике. Состав примитивов и их свойства в среде АutоСАD.

  13. Основные свойства и особенности полилиний в графической системе AutoCAD.

  14. Геометрические модели 3d составных объектов.

  15. Что такое кривые Безье в векторной графике?

  16. Чем занимается геометрическое моделирование?

  17. Основные цветовые модели в компьютерной графике.

  18. Основы трехмерного моделирования в компьютерной графике.

  19. Общие понятия о кривых второго порядка и их назначении на примере графической системы AutoCAD.

  20. Разработка чертежа на плоскости. Общие понятия и определения.

БД – базы данных или распределенные системы САПР – курс Терехиной А.О., (или в одном курсе, или в другом).

1/ Что такое ключ таблицы? Какой ключ является составным, простым?

2/ Дана таблица Tab БД:

Тип промышленного

Робота

Число степеней подвижности

Вид привода

Способ управления

ПР5-2П

3

Пневматический

Цикловой

ЦПР-1П

3(4)

Пневматический

Цикловой

ТУР-2,5

4

Электромеханический

Позиционный

ТУР-10К

5

Электромеханический

Контурный

Какая таблица будет выведена по запросу: «select Distinct Вид_привода, Способ_управления from Tab» ?

3/ В таблице Tab1 хранятся сведения о месте жительстве сотрудников фирмы, в таблице Tab2 хранятся сведения о должностях сотрудников. Таблица Tab1 содержит поля Fam для записи фамилии , Name для записи имени, SName для записи отчества, Adr для записи адреса и некоторые другие поля, таблица Tab2 содержит также поля Fam, Name, SName, поле Job для записи должности и некоторые другие поля. Учитывая, что среди сотрудников нет полных тезок, составить запрос, который выводил бы в одной таблице список сотрудников с указанием адреса и должности.

4/ Даны две таблицы:

Tab1 Tab2

Тип робота

Грузоподъемность

Вид привода

Способ управления

ТУР – 2 . 5

ТУР – 107

2 . 5

10

Пневматический

Электромеханический

Электромеханический

Цикловой

Позиционный

Контурный

Какая таблица будет выведена по запросу: «select * from Tab1,Tab2» ?

5/ В таблице Pers мы имеем список сотрудников с указанием в поле Dep подразделений, в котором они работают. А в таблице Deps мы имеет список всех подразделений в поле Dep и характеристику каждого подразделения в поле Prosv («п», если подразделение производственное, и «у» если оно относится в управлению). Составить запрос, который бы выводил список всех сотрудников производственных подразделений.

6/ В таблице Pers мы имеем список сотрудников с указанием в поле Fam их фамилий. Написать SQL запрос удаляющий всех Ивановых.

7/ Написать SQL запрос, создающий таблицу, в которой 5 полей, причем первое поле ключевое.

8/ В таблице Pers мы имеем список сотрудников с указанием в поле Dep подразделений, в котором они работают, а в поле Year их возраста. Написать SQL запрос, выводящий средний возраст сотрудников подразделения «канцелярия».

9/ В таблице Stud мы имеем список студентов с указанием в поле Gr группы, в которой они учатся. А в таблице Grup мы имеет список всех групп в поле Gr и в поле Fak указывается имя факультета, которому принадлежит группа. Составить SQL запрос, который бы выводил список всех студентов механического факультета.

10/ Перечислите основные функции (назначения) СУБД.

11/ Классификация БД по способу хранения и доступу к данным.

12/ Что такое индекс таблицы? Каково основное назначение индексов?

13/ Поясните следующее понятие: «Целостность БД».

14/ Поясните следующее понятие: «Распределенная система обработки данных».

15/ В запросе надо сделать выборку из двух таблиц разных БД. Как в этом случае надо обращаться к объектам. Как называется такой запрос? Приведите пример.

------------------------------------------------------------------------------------------------------------

  1. Поясните принципиальное отличие репликации в on-line режиме от репликации в отложенном режиме. При каком из этих видов происходит двухфазное фиксирование транзакций и какие фазы оно включает.

  1. В запросе надо сделать выборку из двух таблиц разных БД. Как в этом случае надо обращаться к объектам. Как называется такой запрос? Приведите пример

Какие внутренние формы представления исходной программы вы знаете? В чем особенность каждой из этих форм?

  1. В таблице Tab1 хранятся сведения о месте жительстве сотрудников фирмы, в таблице Tab2 хранятся сведения о должностях сотрудников. Таблица Tab1 содержит поля Fam для записи фамилии , Name для записи имени, SName для записи отчества, Adr для записи адреса и некоторые другие поля, таблица Tab2 содержит также поля Fam, Name, SName, поле Job для записи должности и некоторые другие поля. Учитывая, что среди сотрудников нет полных тезок, составить запрос, который выводил бы в одной таблице список сотрудников с указанием адреса и должности.

  1. Даны две таблицы:

Tab1 Tab2

Тип робота

Грузоподъемность

Вид привода

Способ управления

ТУР – 2 . 5

ТУР – 107

2 . 5

10

Пневматический

Электромеханический

Электромеханический

Цикловой

Позиционный

Контурный

Какая таблица будет выведена по запросу: «select * from Tab1,Tab2» ?

  1. В таблице Pers мы имеем список сотрудников с указанием в поле Dep подразделений, в котором они работают, а в поле Year их возраста. Написать SQL запрос, выводящий средний возраст сотрудников подразделения «канцелярия».

  2. В таблице Stud мы имеем список студентов с указанием в поле Gr группы, в которой они учатся. А в таблице Grup мы имеет список всех групп в поле Gr и в поле Fak указывается имя факультета, которому принадлежит группа. Составить SQL запрос, который бы выводил список всех студентов механического факультета

7.Перечислите основные функции (назначения) СУБД.

8. Классификация БД по способу хранения и доступу к данным.

Яз – языки программирования или информатика.

Основные элементы языка С: азбука языка, комментарии, лексемы. Приведите примеры.

Условный оператор языка С. Привести примеры использования.

Операторы цикла языка С. Приведите примеры.

Массивы в языке С. Объявление и инициализация. Привести примеры.

Функции в языке С. Объявление, определение и вызов. Приведите примеры.

Автоматическое и принудительное приведение типов в языке С. Приведите примеры.

Параметры и аргументы функций. Обмен информацией между функцией и вызывающей программой, на примере языка С.

Базовые типы данных языка С. Использование модификаторов типов.

Операции сравнения и логические операции языка С. Приведите примеры.