
- •Лабораторная работа №1
- •Ход работы:
- •Лабораторная работа №2
- •Ход работы:
- •Задание для самостоятельного решения
- •Лабораторная работа №3
- •Ход работы:
- •Задание для самостоятельного решения
- •Учреждение образования «Гомельский торгово-экономический колледж» Белкоопсоюза
- •Лабораторная работа №4
- •Динамическое создание объектов
- •Динамические объекты. Деструкторы
- •Ход работы:
- •Задание для самостоятельного решения
- •Учреждение образования «Гомельский торгово-экономический колледж» Белкоопсоюза
- •Лабораторная работа №5
- •Procedure tForm1.Button2Click (Sender: tObject); {обработка массива}
- •Задание для самостоятельного решения
- •Учреждение образования «Гомельский торгово-экономический колледж» Белкоопсоюза
- •Лабораторная работа №6
- •Ход работы:
Лабораторная работа №3
«Полиморфизм»
по дисциплине «Объектно-ориентированное программирование»
для групп П-21, П-22, П-23
специальность:
2-40 01 01 «Программное обеспечение информационных технологий»
специализация:
2-40 01 01 35 «Программное обеспечение обработки экономической и деловой информации»
2-40 01 01 33 «Компьютерная графика»
Разработала преподаватель
О.Л. Иткина
Гомель, 2012
Цель работы: изучить принцип полиморфизма
Теоретические сведения:
Полиморфизм
Слово полиморфизм греческого происхождения и означает приблизительно "много форм" (poly – много, morphos – форма). Причем слово morphos имеет отношение к греческому богу сна Морфею (Morphus), который мог являться спящим людям в любой форме, в какой только пожелает, и, следовательно, был воистину полиморфным.
В биологии полиморфные виды – это те (наподобие человека), которые характеризуются наличием различных форм или расцветок.
В химии полиморфные соединения могут кристаллизоваться, по крайней мере, в двух различных формах. Например, углерод имеет две кристаллические формы – графит и алмаз.
То есть полиморфизм – это способность объектов в одной цепочке иметь одно имя и разные реализации.
С точки зрения реализации на объектно-ориентированном языке программирования полиморфизм – это способность отличить тип одного объекта от типа другого на этапе выполнения программы, даже если объекты обрабатываются универсальным образом, и компилятор не знает истинного типа каждого из них.
Полиморфизм подразумевает наличие виртуальных функций. Следовательно, класс, который имеет хотя бы одну виртуальную функцию, является полиморфным, а программа, создающая и использующая объекты такого типа, является объектно-ориентированной.
Таким образом, термины "полиморфизм" и "объектно-ориентированное программирование" могут рассматриваться в некотором роде как синонимы.
Ход работы:
Задание 1. Наберите и проанализируйте программу. Определите в данной программе принцип полиморфности созданных объектов. Объясните результаты выполнения программы.
program demojlist;
uses graph, crt, monsters;
const n = 30;
type
pnode = ^node;
node = record
pm: pmonstr; next : pnode; end; list = object
constructor tirit: procedure add(pm : pmonstr); procedure draw; destructor done; .private
beg : pnode; end;
{ list.init }
constructor list.init;
begin beg := nil
end;
{ list.add }
procedure list.add(pm : pmonstr); var p : pnode: begin new(p); p^.pm := pm; pA.next := beg; beg := p; end;
{ list.draw }
procedure list.draw; 'var p : pnode; begin
p := beg;
while p <> nil do begin
p*.pirT.draw;
р := pA.next; end; end; { list.done }
destructor list.done; var p : pnode; begin
while beg <> nil do begin
p := beg;
dispose(p*.pm, done);
beg := p'.next;
dispose(p); end end; { report }
procedure report(message: string);
var s ; string;
begin
str(MemAvail, s);
outtext(message + s);
moveto(0, GetY + 12); end; var
stado : list:
x. у : integer;
gd, grrt : integer;
p : pmonstr;
i : word; { главная программа ----- }
begin
gd :detect;
initgraph(gd. gm. '...');
if graphresult <> grOk then begin
write!n('ошибка инициализации графики'); exit end; randomize;
report (доступно в начале программы: '); stado.init;
for i := 1 to n do begin , case random(2) of
p := new(pmonstr, init(random(600), random(440), 10, 8));
p := new(pdaemon, init(random(600), random(440). 10, 8, 6)); end;
st;ado.add(p); {добавление объекта в список } end:
report ( доступно после выделения памяти: '); stado.draw;
stado.done;
report(' доступно после освобождения памяти: '); readln;
end.