Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

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

Содержание

ООПРезультат эволюционного развития идей процедурного программированияПопытка программировать с помощью высокоуровневых абстракцийПервый язык – Симула, 1967 год
Объекты (версия 19.11.2011)Чернышев Георгий ООПРезультат эволюционного развития идей процедурного программированияПопытка программировать с помощью высокоуровневых абстракцийПервый язык – Симула, 1967 год Три кита ООПИнкапсуляцияОбъединение записей с процедурами и функциями работающими с этими записями. Пример: Строка в языке СиКонкатенацияchar* str1 = new char[10] ;str1 = “abc\0”;char* Реализация наследования в ПаскалеRECORD не имеет возможности наследованияTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;END;	TStudent = OBJECT(TPerson)		Score:REAL;END; Экземпляры объектовТак же как и обычные статические или динамические переменныеTYPE	PStudent = ^TStudent;VAR	Static_student: TStudent;	Dynamic_student: PStudent; Поля объектовStudent.Score := 4.5;WITH Student DO BEGIN	Name := ‘Иванов Иван Иванович’;	Date := ’19-11-2010’;END; Инициализация и проба методовTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE Init (Nm, Dt: STRING, Rt:Real);END;PROCEDURE Определение методовФункции и процедурыПоля данных объявляются перед методамиTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE Init Определение методовPROCEDURE TPerson.Init(Nm, Dt:String; Rt:REAL)BEGIN	Name := Nm;	Date := Dt;	Rate := Rt;END;FUNCTION TPerson.GetName: String;BEGIN	GetName := Name;END; Некоторые конструкцииWITH DO …Возможность использование полей, вызова метода без прописывания идентификатора объектаSelf Скрытие методов объектаМодификаторы доступа:PUBLIC – видны всем и всегдаPRIVATE – ограничены радиусом ИнкапсуляцияФактически была описана вышеОбъединение в объекте кода и данныхКлючевые аспекты:Нет необходимости обращаться к полям непосредственно Зачем закрывать поля?Объекты будут использоваться другими программистамиЗащита от ошибокВаша задача – предоставить Пример: объект строкаTYPE	TString = OBJECT		contents: array of [1..255] char;		length: integer;		PROCEDURE PRINT;		PROCEDURE SETSTR Переопределение методовTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE Init (Nm, Dt: STRING, Rt:Real);END;TYPE 	TStudent = Наследование статических методовВсе что было написано ранее – касалось наследования статических методовЕсли Решение: виртуальные методыЭто суть идеи полиморфизмаРаннее и позднее связывание Совместимость типовПотомок совместим со своими родителямиПроявляется:Между экземплярами объектовМежду указателями на экземпляры объектовМежду Приведение типовX = (ТИП) YТеперь тип объекта X будет YСталкивались и без Виртуальные методыЗадаются ключевым словом VIRTUALЗадаются как в родительском типе Должны быть так Пример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] Конструкторы и ДеструкторыКаждый тип объекта имеющий виртуальные методы обязан иметь к-рКонструктор – Динамические объектыВсе что было раньше – статические объекты, на стекеМожно и нужно ДеструкторыУдаление такого объекта из динамической памятиDispose(P) может быть мало:Сложная структура которая держит Это совсем не конецОсобенности устройства таблицы виртуальных методовДинамические методыTypeOf, SizeOf… Что почитатьВикипедия про ООП, все ссылки (много)Турбо Паскаль 7.0, BHVЛюбая другая хорошая ЗадачиДля зачета за эту тему надо набрать 3 баллаЗадачи без * считаются О задачахЭти задания – на объекты, а не на алгоритмическую реализацию. Тут Задача – “Комплексные числа”Реализовать комплексные числа как объектДолжен поддерживать методы:CompareTo(Complex)AddMultiplyPrint Задача – “Стек”Реализовать стек как объектДолжен поддерживать методы:PushPopCloneCompareTo(Stack) Задача – “Очередь”Реализовать очередь с приоритетами как объектДолжен поддерживать методы:EnqueueDequeueCloneCompareTo(Queue) Задача – “Список”Реализовать объект “двусвязный список”Должен поддерживать методыПоискКонкатенацияtoArrayПоворот Задача – “Компьютерная сеть”Есть компьютеры, N типов операционных систем, Li уровень защиты Задача – “Матрица”Реализовать библиотеку по работе с матрицамиУмножение на матрицу, на векторПечатьСлед Задача – “Множество”Реализовать структуру данных “множество”Обязательно должны быть операцииПересечениеОбъединениеРазностьПроверка принадлежности элемента множествуЕсли Задача – “Кинотеатр”Реализовать сервис по продаже билетовКинотеатр – поле N*MЕсть L зон, Задача – “Поезд”Есть поезд с набором вагонов C, у вагона есть грузоподъемность Задача – “Просто строки”Реализовать объект “Строка”Методы:Char charAt(int x)/setCharAt(int x, char c)concat(string x)Substr(int Задача* – “Кватернионы”Реализовать кватернионы на комплексных числахОперации:Сложение/умножениеСопряжение/модуль/обращениеПечать, ввод итд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 Задача* – “Магазин”Реализовать симулятор магазина со следующей функциональностьюОбработка нескольких заказовНесколько заказов от Задача* – “Префиксное дерево”Реализовать префиксное деревоОперацииДобавлениеУдалениеПоиск Задача* – “Scheduler”Реализовать “параллельное” исполнение нескольких работ. Работа - это исполнение в Задача* – “Транзакции”Транзакция - это последовательность операцийRead(Xi), Write(Xi), Commit, AbortCommit - успешное Задача* – “список++”Тоже что и простой список, но должен уметь работать с Задача* – “Список с итератором”Реализовать тот же набор операций, что в задаче Задача* – “Строки”Реализовать объект “Строка”Методы:Char charAt(int x)/setCharAt(int x, char c)concat(string x)Substr(int start, Задача* – “Электронная почта”Написать сервис электронной почты который позволяетЧитать и отправлять “сообщения”Сервис Задача* – “Файловый менеджер”Создать симулятор файлового менеджера с интерфейсом командной строкиРеализации работы Задача* – “Множество++”Реализовать объект – “множество”, должно быть произвольного типаОперации:Стандартные: пересечение, объединение, Задача* – “Органайзер”Создать электронный органайзер которыйИмеет встроенные часы (в тестовых целях переводятся Задача* – “Касса”Создать приложение обеспечивающее работу кассы железнодорожных билетовВагоны бывают трех различных Задача** – “Бронирование”Создать систему продажи билетов для авиаперевозок с учетом пересадокЕсть 3 Задача** – “Менеджер памяти”Для хранения структур данных вида запись будем использовать структуру Задача** – “Список с умным итератором”Тоже самое что в задаче с итератором, Задача** – “Рогалик”Создать Roguelike игруhttp://en.wikipedia.org/wiki/RoguelikeВ ней должны быть объекты:Внутри-игровые: игрок, монстры, предметы, Задача** – “Цивилизация”Создать игру для N игроков в режиме hot-seatПоле M*N, на Задача** – “Оконный менеджер”Создать оконный менеджер, который умеетРаботать с несколькими окнами, накладываемыми Задача** – “Диалоговый менеджер”Создать диалоговый менеджер, который умеетРаботать с несколькими диалогамиОкно, имеющее Задача** – “SVG”Создать редактор векторной графики, который умеетРаботать с несколькими различными примитивами Задача** – “mini СУБД”Реализовать СУБД:Набор таблиц со значениями (INT, STR)Реляционная алгебра:SELECTPROJECTJOIN по Задача** – “Диспетчер”Реализуем оконный простенький менеджер, как из предыдущего задания, но теперь Задача** – “Компьютер”Есть узлы компьютера, с различными разъемами (A, B, C, …)Каждый Ссылкиhttp://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29По-хорошему, сильному программисту отсюда надо знать всеКнигиGamma, “Gang of four”, классика от
Слайды презентации

Слайд 2 ООП
Результат эволюционного развития идей процедурного программирования

Попытка программировать с

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

помощью высокоуровневых абстракций

Первый язык – Симула, 1967 год


Слайд 3 Три кита ООП
Инкапсуляция
Объединение записей с процедурами и функциями

Три кита ООПИнкапсуляцияОбъединение записей с процедурами и функциями работающими с этими

работающими с этими записями. Это – объект.

Наследование
Определение свойств объекта

и использование их в дальнейшем для построения иерархии порожденных объектов

Полиморфизм
Присваивание определенному действию имени, которое потом используется по всей иерархии объектов сверху до низу, причем каждый объект выполняет это действие характерным ему способом

Слайд 4 Пример: Строка в языке Си
Конкатенация
char* str1 = new

Пример: Строка в языке СиКонкатенацияchar* str1 = new char[10] ;str1 =

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

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

= 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;

динамические переменные

TYPE
PStudent = ^TStudent;
VAR
Static_student: TStudent;
Dynamic_student: PStudent;


Слайд 7 Поля объектов
Student.Score := 4.5;


WITH Student DO BEGIN
Name :=

Поля объектовStudent.Score := 4.5;WITH Student DO BEGIN	Name := ‘Иванов Иван Иванович’;	Date := ’19-11-2010’;END;

‘Иванов Иван Иванович’;
Date := ’19-11-2010’;
END;


Слайд 8 Инициализация и проба методов
TYPE
TPerson = OBJECT
Name: STRING[30];
Date:STRING[10];
Rate:REAL;
PROCEDURE Init

Инициализация и проба методовTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE Init (Nm, Dt: STRING,

(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

Определение методовФункции и процедурыПоля данных объявляются перед методамиTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE

= 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 :=

Определение методовPROCEDURE TPerson.Init(Nm, Dt:String; Rt:REAL)BEGIN	Name := Nm;	Date := Dt;	Rate := Rt;END;FUNCTION TPerson.GetName: String;BEGIN	GetName := Name;END;

Dt;
Rate := Rt;
END;

FUNCTION TPerson.GetName: String;
BEGIN
GetName := Name;
END;


Слайд 11 Некоторые конструкции
WITH DO …
Возможность использование полей, вызова

Некоторые конструкцииWITH DO …Возможность использование полей, вызова метода без прописывания идентификатора

метода без прописывания идентификатора объекта

Self – неявная ссылка на

себя
GetName := Name;
GetName := Self.Name;

Слайд 12 Скрытие методов объекта
Модификаторы доступа:
PUBLIC – видны всем и

Скрытие методов объектаМодификаторы доступа:PUBLIC – видны всем и всегдаPRIVATE – ограничены

всегда
PRIVATE – ограничены радиусом модуля
Действуют и на данные и

методы

Модули:
Подключаются с помощью USES

Слайд 13 Инкапсуляция
Фактически была описана выше
Объединение в объекте кода и

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

данных

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


Слайд 14 Зачем закрывать поля?
Объекты будут использоваться другими программистами
Защита от

Зачем закрывать поля?Объекты будут использоваться другими программистамиЗащита от ошибокВаша задача –

ошибок
Ваша задача – предоставить набор объектов совокупность которых решает

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

Слайд 15 Пример: объект строка
TYPE
TString = OBJECT
contents: array of [1..255]

Пример: объект строкаTYPE	TString = OBJECT		contents: array of [1..255] char;		length: integer;		PROCEDURE PRINT;		PROCEDURE

char;
length: integer;
PROCEDURE PRINT;
PROCEDURE SETSTR (s: array of char);
END;

TString.PRINT;
VAR
i: integer;
BEGIN
i

:= 0;
while (i < length) do writeln(contents[i]);
END;

Что будет если пользователь вдруг изменит только длину строки?

Вывод: длина строки должна быть закрыта от пользователя модификатором private


Слайд 16 Переопределение методов
TYPE
TPerson = OBJECT
Name: STRING[30];
Date:STRING[10];
Rate:REAL;
PROCEDURE Init (Nm, Dt:

Переопределение методовTYPE	TPerson = OBJECT		Name: STRING[30];		Date:STRING[10];		Rate:REAL;	PROCEDURE Init (Nm, Dt: STRING, Rt:Real);END;TYPE 	TStudent

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

Приведение типовX = (ТИП) YТеперь тип объекта X будет YСталкивались и

будет Y

Сталкивались и без объектов (неявное приведение типов, первый

семестр):
char -> integer -> real
Но не наоборот (нужно явное)


Слайд 21 Виртуальные методы
Задаются ключевым словом VIRTUAL
Задаются как в родительском

Виртуальные методыЗадаются ключевым словом 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

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

: 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) может быть

ДеструкторыУдаление такого объекта из динамической памятиDispose(P) может быть мало:Сложная структура которая

мало:
Сложная структура которая держит память
Бинарное дерево, реализуем операцию удалить

все элементы большие X

Слайд 26 Это совсем не конец
Особенности устройства таблицы виртуальных методов

Динамические

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

методы

TypeOf, SizeOf




Слайд 27 Что почитать
Википедия про ООП, все ссылки (много)

Турбо Паскаль

Что почитатьВикипедия про ООП, все ссылки (много)Турбо Паскаль 7.0, BHVЛюбая другая

7.0, BHV
Любая другая хорошая книжка по нему

Встроенный Help Turbo

Pascal, учебника это, однако, не заменит

Слайд 28 Задачи
Для зачета за эту тему надо набрать 3

ЗадачиДля зачета за эту тему надо набрать 3 баллаЗадачи без *

балла
Задачи без * считаются за 1 балл
Задачи со *

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

Слайд 29 О задачах
Эти задания – на объекты, а не

О задачахЭти задания – на объекты, а не на алгоритмическую реализацию.

на алгоритмическую реализацию. Тут важно:
Понимание основ ООП (наследование, полиморфизм)
Сложные

задачи показывают как применять паттерны проектирования

Задачи очень творческие, имеют много решений

Слайд 30 Задача – “Комплексные числа”
Реализовать комплексные числа как объект

Должен

Задача – “Комплексные числа”Реализовать комплексные числа как объектДолжен поддерживать методы:CompareTo(Complex)AddMultiplyPrint

поддерживать методы:
CompareTo(Complex)
Add
Multiply
Print


Слайд 31 Задача – “Стек”
Реализовать стек как объект

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

Задача – “Стек”Реализовать стек как объектДолжен поддерживать методы:PushPopCloneCompareTo(Stack)

Слайд 32 Задача – “Очередь”
Реализовать очередь с приоритетами как объект

Должен

Задача – “Очередь”Реализовать очередь с приоритетами как объектДолжен поддерживать методы:EnqueueDequeueCloneCompareTo(Queue)

поддерживать методы:
Enqueue
Dequeue
Clone
CompareTo(Queue)


Слайд 33 Задача – “Список”
Реализовать объект “двусвязный список”

Должен поддерживать методы
Поиск
Конкатенация
toArray
Поворот

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

Слайд 34 Задача – “Компьютерная сеть”
Есть компьютеры, N типов операционных

Задача – “Компьютерная сеть”Есть компьютеры, N типов операционных систем, Li уровень

систем, Li уровень защиты от вируса

Компьютеры соединены с другими

компьютерами сетью

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



Слайд 35 Задача – “Матрица”
Реализовать библиотеку по работе с матрицами
Умножение

Задача – “Матрица”Реализовать библиотеку по работе с матрицамиУмножение на матрицу, на

на матрицу, на вектор
Печать
След и вычисление решения методом гаусса

уравнения Ax=B, строки ЛНЗ

Слайд 36 Задача – “Множество”
Реализовать структуру данных “множество”


Обязательно должны быть

Задача – “Множество”Реализовать структуру данных “множество”Обязательно должны быть операцииПересечениеОбъединениеРазностьПроверка принадлежности элемента

операции
Пересечение
Объединение
Разность
Проверка принадлежности элемента множеству
Если сделать так, чтобы элементом данного

множества мог быть любой тип какой захотим, без переписывания всего кода, то тогда *
В данном случае нужен компаратор

Слайд 37 Задача – “Кинотеатр”
Реализовать сервис по продаже билетов
Кинотеатр –

Задача – “Кинотеатр”Реализовать сервис по продаже билетовКинотеатр – поле N*MЕсть L

поле N*M
Есть L зон, непересекающихся, со своей ценой
Зона –

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



Слайд 38 Задача – “Поезд”
Есть поезд с набором вагонов C,

Задача – “Поезд”Есть поезд с набором вагонов C, у вагона есть

у вагона есть грузоподъемность и объем
Груз – типы A,B,C..Z
Поезд

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






Слайд 39 Задача – “Просто строки”
Реализовать объект “Строка”
Методы:
Char charAt(int x)/setCharAt(int

Задача – “Просто строки”Реализовать объект “Строка”Методы:Char charAt(int x)/setCharAt(int x, char c)concat(string

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

итд

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”
Реализовать “параллельное” исполнение нескольких работ. Работа

Задача* – “Scheduler”Реализовать “параллельное” исполнение нескольких работ. Работа - это исполнение

- это исполнение в цикле каких-либо инструкций

Планировщик последовательно в

случайном порядке исполняет работы (threads)

Реализовать такую систему
Пригодятся паттерны стратегия и диспетчер

Слайд 44 Задача* – “Транзакции”
Транзакция - это последовательность операций
Read(Xi), Write(Xi),

Задача* – “Транзакции”Транзакция - это последовательность операцийRead(Xi), Write(Xi), Commit, AbortCommit -

Commit, Abort
Commit - успешное завершение, Abort – отмена всех

операций
Каждой транзакции идет в паре уровень изоляции – никакой и полный (замок налагается на все переменные в транзакции)
Выполнить данный набор транзакций с их уровнями. Исполнитель транзакций должен в случайном порядке исполнить данный набор транзакций

Слайд 45 Задача* – “список++”
Тоже что и простой список, но

Задача* – “список++”Тоже что и простой список, но должен уметь работать

должен уметь работать с любым элементом


Нужно создать класс элемент

и от него отнаследовать различные типы

Слайд 46 Задача* – “Список с итератором”
Реализовать тот же набор

Задача* – “Список с итератором”Реализовать тот же набор операций, что в

операций, что в задаче “Список”
Добавить объект “итератор”, зависящий от

списка, и позволяющий: вставлять за настоящим элементом, удалять настоящий элемент

Итератор:
http://en.wikipedia.org/wiki/Iterator

Слайд 47 Задача* – “Строки”
Реализовать объект “Строка”
Методы:
Char charAt(int x)/setCharAt(int x,

Задача* – “Строки”Реализовать объект “Строка”Методы:Char charAt(int x)/setCharAt(int x, char c)concat(string x)Substr(int

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
Вырезка XВырезка X , результат – тоже множество
Реализовать его на основе дерева


Слайд 51 Задача* – “Органайзер”
Создать электронный органайзер который
Имеет встроенные часы

Задача* – “Органайзер”Создать электронный органайзер которыйИмеет встроенные часы (в тестовых целях

(в тестовых целях переводятся вручную)
Имеет два типа задач
Повторяющиеся (например

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

Слайд 52 Задача* – “Касса”
Создать приложение обеспечивающее работу кассы железнодорожных

Задача* – “Касса”Создать приложение обеспечивающее работу кассы железнодорожных билетовВагоны бывают трех

билетов
Вагоны бывают трех различных типов
Каждый тип вагона имеет свое

расположение мест
Стоимость зависит от типа вагона и места

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


Слайд 53 Задача** – “Бронирование”
Создать систему продажи билетов для авиаперевозок

Задача** – “Бронирование”Создать систему продажи билетов для авиаперевозок с учетом пересадокЕсть

с учетом пересадок
Есть 3 типа мест – эконом класс,

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

Слайд 54 Задача** – “Менеджер памяти”
Для хранения структур данных вида

Задача** – “Менеджер памяти”Для хранения структур данных вида запись будем использовать

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

единого куска памяти и указателей на нее

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

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

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

в задаче с итератором, однако, теперь, к каждому списку

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


Слайд 56 Задача** – “Рогалик”
Создать Roguelike игру
http://en.wikipedia.org/wiki/Roguelike

В ней должны быть

Задача** – “Рогалик”Создать Roguelike игруhttp://en.wikipedia.org/wiki/RoguelikeВ ней должны быть объекты:Внутри-игровые: игрок, монстры,

объекты:
Внутри-игровые: игрок, монстры, предметы, абстракция команды
Объекты, связанные с визуализацией

Задание

довольно обширное, и поэтому творческое. Если что-то не будет реализовано, то ничего страшного. Однако, если задание будет слишком упрощено, будут сделаны некоторые Feature Requests для зачета

Слайд 57 Задача** – “Цивилизация”
Создать игру для N игроков в

Задача** – “Цивилизация”Создать игру для N игроков в режиме hot-seatПоле M*N,

режиме hot-seat
Поле M*N, на котором отряды и города
Города производят

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

Слайд 58 Задача** – “Оконный менеджер”
Создать оконный менеджер, который умеет
Работать

Задача** – “Оконный менеджер”Создать оконный менеджер, который умеетРаботать с несколькими окнами,

с несколькими окнами, накладываемыми друг на друга
Окно, имеющее фокус,

рисуется поверх остальных (концепция Z-уровней)
Окна можно перемещать по экрану, сворачивать

Окно имеет
Цвет рамки
Цвет фона


Слайд 59 Задача** – “Диалоговый менеджер”
Создать диалоговый менеджер, который умеет
Работать

Задача** – “Диалоговый менеджер”Создать диалоговый менеджер, который умеетРаботать с несколькими диалогамиОкно,

с несколькими диалогами
Окно, имеющее фокус, рисуется поверх остальных (концепция

Z-уровней)

Диалог имеет
Цвет фона
Текст, не выходящий за рамки окна
Кнопки, по которым вызывается другие диалоговые окна


Слайд 60 Задача** – “SVG”
Создать редактор векторной графики, который умеет
Работать

Задача** – “SVG”Создать редактор векторной графики, который умеетРаботать с несколькими различными

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

в виде объектов, именовать композицию

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


Слайд 61 Задача** – “mini СУБД”
Реализовать СУБД:
Набор таблиц со значениями

Задача** – “mini СУБД”Реализовать СУБД:Набор таблиц со значениями (INT, STR)Реляционная алгебра:SELECTPROJECTJOIN

(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,

(A, B, C, …)
Каждый компонент определенного типа потребляет N

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

  • Имя файла: obekty-versiya-19112011.pptx
  • Количество просмотров: 104
  • Количество скачиваний: 0