Презентация на тему "Объекты (версия 19.11.2011)"

Презентация: Объекты (версия 19.11.2011)
1 из 64
Ваша оценка презентации
Оцените презентацию по шкале от 1 до 5 баллов
  • 1
  • 2
  • 3
  • 4
  • 5
5.0
1 оценка

Комментарии

Нет комментариев для данной презентации

Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.


Добавить свой комментарий

Аннотация к презентации

Интересует тема "Объекты (версия 19.11.2011)"? Лучшая powerpoint презентация на эту тему представлена здесь! Данная презентация состоит из 64 слайдов. Средняя оценка: 5.0 балла из 5. Также представлены другие презентации по информатике для 7-11 класса. Скачивайте бесплатно.

Содержание

  • Презентация: Объекты (версия 19.11.2011)
    Слайд 1

    Объекты (версия 19.11.2011)

    Чернышев Георгий

  • Слайд 2

    ООП

    Результат эволюционного развития идей процедурного программирования Попытка программировать с помощью высокоуровневых абстракций Первый язык – Симула, 1967 год

  • Слайд 3

    Три кита ООП

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

  • Слайд 4

    Пример: Строка в языке Си

    Конкатенация char* str1 = new char[10] ; str1 = “abc\0”; char* str2 = new char[10] ; str2 = “def\0”; char* str3 =new char[strlen(str1) + strlen(str2)]; strncpy(str1, str3, strlen(str1)); strncpy(str2, str3+strlen(str1), strlen(str2)) str3[strlen(str1) + strlen(str2)] = ‘\0’; И такой код писать каждый раз при конкатенации! Что будет с существующем проектом если механизм работы с этой строкой поменяется?

  • Слайд 5

    Реализациянаследования в Паскале

    RECORD не имеет возможности наследования TYPE TPerson = OBJECT Name: STRING[30]; Date:STRING[10]; Rate:REAL; END; TStudent = OBJECT(TPerson) Score:REAL; END;

  • Слайд 6

    Экземпляры объектов

    Так же как и обычные статические или динамические переменные TYPE PStudent = ^TStudent; VAR Static_student: TStudent; Dynamic_student: PStudent;

  • Слайд 7

    Поля объектов

    Student.Score := 4.5; WITH Student DO BEGIN Name := ‘Иванов Иван Иванович’; Date := ’19-11-2010’; END;

  • Слайд 8

    Инициализация и проба методов

    TYPE TPerson = OBJECT Name: STRING[30]; Date:STRING[10]; Rate:REAL; PROCEDURE Init (Nm, Dt: STRING, Rt:Real); END; PROCEDURE TPerson.Init(Nm, Dt:String; Rt:REAL) BEGIN Name := Nm; Date := Dt; Rate := Rt; END;

  • Слайд 9

    Определение методов

    Функции и процедуры Поля данных объявляются перед методами TYPE TPerson = OBJECT Name: STRING[30]; Date:STRING[10]; Rate:REAL; PROCEDURE Init (Nm, Dt: STRING, Rt:Real); FUNCTION GetName : STRING; FUNCTION GetDate : STRING; FUNCTION GetRate : REAL; END;

  • Слайд 10

    PROCEDURE TPerson.Init(Nm, Dt:String; Rt:REAL) BEGIN Name := Nm; Date := Dt; Rate := Rt; END; FUNCTION TPerson.GetName: String; BEGIN GetName := Name; END;

  • Слайд 11

    Некоторые конструкции

    WITH DO … Возможность использование полей, вызова методабез прописывания идентификатора объекта Self – неявная ссылка на себя GetName := Name; GetName := Self.Name;

  • Слайд 12

    Скрытие методов объекта

    Модификаторы доступа: PUBLIC – видны всем и всегда PRIVATE – ограничены радиусом модуля Действуют и на данные и методы Модули: Подключаются с помощью USES

  • Слайд 13

    Инкапсуляция

    Фактически была описана выше Объединение в объекте кода и данных Ключевые аспекты: Нет необходимости обращаться к полям непосредственно

  • Слайд 14

    Зачемзакрывать поля?

    Объекты будут использоваться другими программистами Защита от ошибок Ваша задача – предоставить набор объектов совокупность которых решает задачу. Самое важное – сделать так, чтобы этим набором правильно пользовались. Защита от недобросовестного использования Ясный контракт помогает быстрее разобраться

  • Слайд 15

    Пример: объектстрока

    TYPE TString = OBJECT contents: array of [1..255] char; length: integer; PROCEDURE PRINT; PROCEDURE SETSTR (s: array of char); END; TString.PRINT; VAR i: integer; BEGIN i := 0; while (i

  • Слайд 16

    Переопределение методов

    TYPE TPerson = OBJECT Name: STRING[30]; Date:STRING[10]; Rate:REAL; PROCEDURE Init (Nm, Dt: STRING, Rt:Real); END; TYPE TStudent = OBJECT(TPerson) Score: REAL; FUNCTION GetScore:REAL; PROCEDURE Init (Nm, Dt: STRING, Rt, Sc:Real); PROCEDURE ShowScore; END; PROCEDURE TStudent.Init(Nm, Dt:String; Rt, Sc:REAL) BEGIN TPerson.Init(Nm, Dt, Rt); Score := Sc; END; Вызов наследуемого метода ..

  • Слайд 17

    Наследование статических методов

    Все что было написано ранее – касалось наследования статических методов Если методы A и B заданы в объектах типа TPersonи TStudent, топри вызове из метода A, метода B в объекте TStudentбудет вызван метода B объекта TPerson Иначе говоря: будет вызываться метод родителя

  • Слайд 18

    Решение: виртуальные методы

    Это суть идеи полиморфизма Раннее и позднее связывание

  • Слайд 19

    Совместимость типов

    Потомок совместим со своими родителями Проявляется: Между экземплярами объектов Между указателями на экземпляры объектов Между формальными и фактическими параметрами Реализована с помощью приведения типов

  • Слайд 20

    Приведение типов

    X = (ТИП)Y Теперь тип объекта X будет Y Сталкивались и без объектов (неявное приведение типов, первый семестр): char -> integer -> real Но не наоборот (нужно явное)

  • Слайд 21

    Виртуальные методы

    Задаются ключевым словом VIRTUAL Задаются как в родительском типе Должны быть так же объявлены в потомках FUNCTION GetSum:REAL; VIRTUAL; PROCEDURE ShowSum; VIRTUAL;

  • Слайд 22

    Пример

    TPerson.Print() Begin writeln(‘человек’); End; TStudent.Print() Begin writeln(‘студент’); End; // виртуальные Var a: array [1..3] of TPerson; i : integer; Begin a[1] := TPerson.Init(..); a[2] := TStudent.Init(..); a[3] := TPerson.Init(..); for i := 1 to 3 do a[i]^.Print(); End. Выведет: человекстудент человек

  • Слайд 23

    Конструкторы и Деструкторы

    Каждый тип объекта имеющий виртуальные методы обязан иметь к-р Конструктор – специальный тип процедуры выполняющий инициализацию Вызов любого виртуального метода происходит только после вызова конструктора CONSTRUCTOR Init(Nm, Dt: STRING, Rt, Sc: REAL); DESTRUCTOR Done; VIRTUAL;

  • Слайд 24

    Динамические объекты

    Все что было раньше – статическиеобъекты, на стеке Можно и нужно держать в динамической памяти. Для этого использовать указатели и NEW: VAR P:^TPerson; NEW(P, ); P^.Init(…) – в начале нужен вызов конструктора, всегда

  • Слайд 25

    Деструкторы

    Удаление такого объекта из динамической памяти Dispose(P) может быть мало: Сложная структура которая держит память Бинарное дерево, реализуем операцию удалить все элементы большие X

  • Слайд 26

    Это совсем не конец

    Особенности устройства таблицы виртуальных методов Динамические методы TypeOf, SizeOf …

  • Слайд 27

    Что почитать

    Википедия про ООП, все ссылки (много) Турбо Паскаль 7.0, BHV Любая другая хорошая книжка по нему Встроенный Help Turbo Pascal, учебника это, однако, не заменит

  • Слайд 28

    Задачи

    Для зачета за эту тему надо набрать 3 балла Задачи без * считаются за 1 балл Задачи со * и ** считаются соответственно за 2 и 3 балла Некоторые задачи имеют дополнения в условиях, при которых их ценность повышается. Для зачета этого типа задач необходимо предъявить оба варианта (и простой вариант тоже)

  • Слайд 29

    О задачах

    Эти задания – на объекты, а не на алгоритмическую реализацию. Тут важно: Понимание основ ООП (наследование, полиморфизм) Сложные задачи показывают как применять паттерны проектирования Задачи очень творческие, имеют много решений

  • Слайд 30

    Задача – “Комплексные числа”

    Реализовать комплексные числа как объект Должен поддерживать методы: CompareTo(Complex) Add Multiply Print

  • Слайд 31

    Задача – “Стек”

    Реализовать стек как объект Должен поддерживать методы: Push Pop Clone CompareTo(Stack)

  • Слайд 32

    Задача – “Очередь”

    Реализовать очередь с приоритетами как объект Должен поддерживать методы: Enqueue Dequeue Clone CompareTo(Queue)

  • Слайд 33

    Задача – “Список”

    Реализовать объект “двусвязный список” Должен поддерживать методы Поиск Конкатенация toArray Поворот

  • Слайд 34

    Задача – “Компьютерная сеть”

    Есть компьютеры, N типов операционных систем, Li уровень защиты от вируса Компьютеры соединены с другими компьютерами сетью Вирус живет на N типе операционной системы, имеет уровень атаки K. Если компьютеры соединены сетью и уровень вируса выше уровня защиты то компьютер заражается После заражения вирус может включать или выключать компьютеры по желанию Вычислить какие компьютеры вирус, стартуя из данного узла может выключить (выключаете их вы, заражение происходит строго до выключения и до конца) Вывести все “пограничные” компьютеры

  • Слайд 35

    Задача – “Матрица”

    Реализовать библиотеку по работе с матрицами Умножение на матрицу, на вектор Печать След и вычисление решения методом гаусса уравнения Ax=B, строки ЛНЗ

  • Слайд 36

    Задача – “Множество”

    Реализовать структуру данных “множество” Обязательно должны быть операции Пересечение Объединение Разность Проверка принадлежности элемента множеству Если сделать так, чтобы элементом данного множества мог быть любой тип какой захотим, без переписываниявсего кода, то тогда * В данном случае нужен компаратор

  • Слайд 37

    Задача – “Кинотеатр”

    Реализовать сервис по продаже билетов Кинотеатр – поле N*M Есть L зон, непересекающихся, со своей ценой Зона – последовательный набор рядов Запросы: Купить X мест, в линию или прямоугольник, бронь идет на группу с названием C Снять броньвзятую группой с названием C Инициализировать зал Подсчитать прибыль Людям чем ближе тем лучше, но важно сесть вместе

  • Слайд 38

    Задача – “Поезд”

    Есть поезд с набором вагонов C, у вагона есть грузоподъемность и объем Груз – типы A,B,C..Z Поезд проходит станции, на каждой из которых могут сделать следующее Загрузить груз (попытаться, не влез - остался) Выгрузить груз, с головного вагона N тонн Разворовать, с хвостового вагона – объем тот же, вес уменьшается вдвое. Разворовывают определенный объем Угоняют целый вагон (с конца) Действия известны на каждой станции Посчитать с чем приедем

  • Слайд 39

    Задача – “Просто строки”

    Реализовать объект “Строка” Методы: Char charAt(int x)/setCharAt(int x, char c) concat(string x) Substr(int start, int end) Print (string x) Split(char), выдает массив строк на основе деления по символу: “abc*cc*ff*”->abc, cc, ff toUpper()/toLower() toUpper(int)/… - для конкретного слова N

  • Слайд 40

    Задача* – “Кватернионы”

    Реализовать кватернионы на комплексных числах Операции: Сложение/умножение Сопряжение/модуль/обращение Печать, ввод итд http://ru.wikipedia.org/wiki/%D0%9A%D0%B2%D0%B0%D1%82%D0%B5%D1%80%D0%BD%D0%B8%D0%BE%D0%BD

  • Слайд 41

    Задача* – “Магазин”

    Реализовать симулятор магазина со следующей функциональностью Обработка нескольких заказов Несколько заказов от одного клиента получают скидку Заказ – набор продуктов, с ценами, от клиента. Операции Подсчитать стоимость всего Добавить/удалить товар Подсчитать выручку магазина за день

  • Слайд 42

    Задача* – “Префиксное дерево”

    Реализовать префиксное дерево Операции Добавление Удаление Поиск

  • Слайд 43

    Задача* – “Scheduler”

    Реализовать “параллельное” исполнение нескольких работ. Работа - это исполнение в цикле каких-либо инструкций Планировщик последовательно в случайном порядке исполняет работы (threads) Реализовать такую систему Пригодятсяпаттерны стратегияи диспетчер

  • Слайд 44

    Задача* – “Транзакции”

    Транзакция - это последовательность операций Read(Xi), Write(Xi), Commit, Abort Commit - успешноезавершение, Abort – отмена всех операций Каждой транзакции идет в паре уровень изоляции – никакой и полный (замок налагается на все переменные в транзакции) Выполнить данный набор транзакций с их уровнями. Исполнитель транзакций должен в случайном порядке исполнить данный набор транзакций

  • Слайд 45

    Задача* – “список++”

    Тоже что и простой список, но должен уметь работать с любым элементом Нужно создать класс элемент и от него отнаследовать различные типы

  • Слайд 46

    Задача* – “Списокс итератором”

    Реализовать тот же набор операций, что в задаче “Список” Добавить объект “итератор”, зависящий от списка, и позволяющий: вставлять за настоящим элементом, удалять настоящий элемент Итератор: http://en.wikipedia.org/wiki/Iterator

  • Слайд 47

    Задача* – “Строки”

    Реализовать объект “Строка” Методы: Char charAt(int x)/setCharAt(int x, char c) concat(string x) Substr(int start, int end) Clone(string x) New (string x) Print (string x) Ленивость строки повышает до ** http://en.wikipedia.org/wiki/Lazy_evaluation Тоесть, должен быть string pool, строки раскопируются тогда когда это нужно

  • Слайд 48

    Задача* – “Электронная почта”

    Написать сервис электронной почты который позволяет Читать и отправлять “сообщения” Сервис локальный на одной машине (данные хранятся в файле) Все это сделать с объектами Дополнительные баллы за Сортировку, классификацию по тэгам Типыпользователей: базовый, платный и администратор

  • Слайд 49

    Задача* – “Файловый менеджер”

    Создать симулятор файлового менеджера с интерфейсом командной строки Реализации работы с диском не требуется Создание, удаление, перемещение файла/каталога Поиск в файле, поиск по имени файла Ссылки на файлы – как в линуксе ** - сделать поиск по имени файла с */?

  • Слайд 50

    Задача* – “Множество++”

    Реализовать объект – “множество”, должно быть произвольного типа Операции: Стандартные: пересечение, объединение, разность Дополнительные: Отбросить все элементы > X, X , результат – тоже множество Реализовать его на основе дерева

  • Слайд 51

    Задача* – “Органайзер”

    Создать электронный органайзер который Имеет встроенные часы (в тестовых целях переводятся вручную) Имеет два типа задач Повторяющиеся (например еженедельные) Разовые, установленные на определенное время По этим задачам, обладает возможностью в любое время вычислить список задач на сегодня Задачи могут добавляться и удаляться вручную

  • Слайд 52

    Задача* – “Касса”

    Создать приложение обеспечивающее работу кассы железнодорожных билетов Вагоны бывают трех различных типов Каждый тип вагона имеет свое расположение мест Стоимость зависит от типа вагона иместа Должныбыть реализованы Бронирование на группу (с учетом пожеланий) по местам в вагонах Снятие бронирования на группу Подсчет выручки

  • Слайд 53

    Задача** – “Бронирование”

    Создать систему продажи билетов для авиаперевозок с учетом пересадок Есть 3 типа мест – эконом класс, первый класс, бизнес-класс, цена зависит от типа места Рейс Вылетаетиз A в B, во время X, прилетает во время Y Считать что пересадки требуют времени не более 15 минут Ваша задача предложить пользователю варианты того как долететь до места назначения, вывести список с ценами. По требованию пользователя упорядочивать по цене, пообщему времени полета, по количеству пересадок, по времени ожидания в аэропортах

  • Слайд 54

    Задача** – “Менеджер памяти”

    Для хранения структур данных вида записьбудем использовать структуру хранения, которая состоит в видеединого куска памятии указателей на нее Функциональность: New Delete Clone Подсчитать размер утекшей памятив конце работы Для простоты можно считать что работаем с одной “страницей”, записей большего размера чем страница нет

  • Слайд 55

    Задача** – “Список с умным итератором”

    Тоже самое что в задаче с итератором, однако, теперь, к каждому списку может подцепиться несколько итераторов. То есть, может случиться беда, если один из итераторов удалит элемент на который указывает другой элемент Сделать так, чтобы не было проблемы Подсказка – нужен менеджер и замки. Хотя решений тут масса

  • Слайд 56

    Задача** – “Рогалик”

    Создать Roguelikeигру http://en.wikipedia.org/wiki/Roguelike В ней должны быть объекты: Внутри-игровые: игрок, монстры, предметы, абстракция команды Объекты, связанные с визуализацией Задание довольно обширное, и поэтому творческое. Если что-то не будет реализовано, то ничего страшного. Однако, если задание будет слишком упрощено, будут сделаны некоторые Feature Requests для зачета

  • Слайд 57

    Задача** – “Цивилизация”

    Создать игру для N игроковв режиме hot-seat Поле M*N, на котором отряды и города Города производят отряды Отряды передвигаются по карте и могут захватывать города Все остальное по вашему усмотрению Задание довольно обширное, и поэтому творческое. Если что-то не будет реализовано, то ничего страшного. Однако, если задание будет слишком упрощено будут сделаны некоторые Feature Requests для зачета

  • Слайд 58

    Задача** – “Оконный менеджер”

    Создать оконный менеджер, который умеет Работать с несколькими окнами, накладываемыми друг на друга Окно, имеющее фокус, рисуется поверх остальных (концепция Z-уровней) Окна можно перемещать по экрану, сворачивать Окно имеет Цвет рамки Цвет фона

  • Слайд 59

    Задача** – “Диалоговый менеджер”

    Создать диалоговый менеджер, который умеет Работать с несколькими диалогами Окно, имеющее фокус, рисуется поверх остальных (концепция Z-уровней) Диалог имеет Цвет фона Текст, не выходящий за рамки окна Кнопки, по которым вызывается другие диалоговые окна

  • Слайд 60

    Задача** – “SVG”

    Создать редактор векторной графики, который умеет Работать с несколькими различными примитивами (линия, окружность, прямоугольник и.т.д.) Запоминать их в виде объектов, именовать композицию Редактор позволяет Изменять масштаб изображения Удалять части из композиции, передвигать объекты и их композиции Сохранять в файле

  • Слайд 61

    Задача** – “mini СУБД”

    Реализовать СУБД: Набор таблиц со значениями (INT, STR) Реляционная алгебра: SELECT PROJECT JOIN по “=” Объекты: Таблица, запрос Промежуточный результат Задача не самая простая, поэтому упрощения Оптимизация не нужна Запросы в удобной для вас форме Условия на SELECT “= Value”, без предикатов http://en.wikipedia.org/wiki/Sql

  • Слайд 62

    Задача** – “Диспетчер”

    Реализуем оконный простенький менеджер, как из предыдущего задания, но теперь с другим фокусом Идея: обрабатывать клики мышкой, если возможно drag-n-drop наших окошек Главное: диспетчер Храниточередь событий Хранит объекты Маршрутизирует объекты событиям, нотифицируя нужных Проблемы: Научиться работать с мышью Хотелось бы что-то типа такого: http://en.wikipedia.org/wiki/Mediator_pattern

  • Слайд 63

    Задача** – “Компьютер”

    Есть узлы компьютера, с различными разъемами (A, B, C, …) Каждый компонент определенного типа потребляет N вольт, всю оставшуюся передают узлам по порядку подключенным Вставляется только в разъем определенного типа Поддерживать данную структуру Добавлять узлы (говорить нельзя или нет) Удалять узлы Подсчитать используемую мощность

  • Слайд 64

    Ссылки

    http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29 По-хорошему, сильномупрограммисту отсюда надо знать все Книги Gamma, “Gang of four”, классикаот звезд, очень глубокая, написана тяжелейшим языком, зато полно примеров по делу и везде есть Портянкин И. Swing. Эффектные пользовательские интерфейсы – как оно работает, на примере работающей JAVA SWING и устройство GUI систем Какие-то книги по concurrency паттернам Java concurrency in practice, обложка с поездами, не читал но профессионалы все хвалят

Посмотреть все слайды

Сообщить об ошибке