вторник, 9 марта 2010 г.

Дополнительная информация по теме: "Классы"

Проработать статью в Интернете
Разобраться с понятиями объекта-родителя и объекта-наследник. Выяснить, какие поля и методы наследуются при описании класса.

понедельник, 8 марта 2010 г.

Понятие класса.

В 80-х годах стали появляться первые коммерческие системы разработки, в которых была реализована новая парадигма программирования, так называемый объектный подход, что позволило резко повысить производительность труда программистов. Подход был основан на понятии объекта, типа данных, в котором сочетаются как свойства, сгруппированные данные (пример – поля в записи), так и методы их обработки (подпрограммы).
Фактически объект стал отражать реальные и даже абстрактные понятия окружающего мира. Например, автомобиль характеризуется такими свойствами, как марка, тип двигателя, наличие колес и руля. «Методы» автомобиля определяют его способность двигаться в нужном направлении в соответствии со значениями своих свойств: объемом бензина в баке, углом поворота руля. Работать с привычными понятиями человеку легче, чем с абстрактными числами.
Класс – это тип данных, а объект – конкретный существующий в памяти компьютера экземпляр класса, переменная соответствующего типа. Классы имеют поля, свойства и методы. Объект создается специальным методом, который называется конструктор. А удаляется объект из памяти другим методом – деструктором.
В основе объектного программирования лежат три принципа: наследование, полиморфизм, инкапсуляция.
Наследование. Программисту достаточно описать базовый класс, а затем классы наследники, которые будут наследовать все поля, свойства и методы базового (родительского) класса.
Полиморфизм. Объект наследник может перекрывать поля и методы объекта родителя.
Инкапсуляция. Инкапсуляция позволяет скрыть внутри описания различные характеристики и возможности класса. Внутри классов некоторые поля и методы можно сделать свободно доступными для использования в любом месте программы, а другие доступными только внутри текущего модуля и собственных методов класса. Инкапсуляция позволяет разграничить доступ разработчиков к различным полям и свойствам класса.
Кроме этих трех фундаментальных возможностей в Delphi реализована возможность обработки события, возникающие в процессе выполнения программы.
Новый класс описывается в Паскале с помощью ключевого слова Class.
Type
Имя_класса=Class(имя_родительского_класса)
Список_членов_класса
End;
Имя родительского класса указывается, если новый класс должен наследовать все его характеристики. Если имя родительского класса опустить, то новый будет наследовать характеристики базового класса TObect.
Список членов класса представляет собой список полей, свойств и методов, которые записываются как обычные поля записи. Например,
Type
TMyClass = Class
Count:integer;
Name:Srtring;
Procedure ShowMyClass (Dis:Boolean);
Function GetCount :integer;
End;
Var
C:TMyClass;
Доступ к полям и методам объекта осуществляется в точности, как при доступе к полям записи, - указанием нужного поля или метода через точку.
Пример:
Var k:TMyClass;

k.Count:=0;
k.Name:=’Class’;
k.ShowMyClass(true);
Пять уровней инкапсуляции.
Доступность любых членов класса определяется принадлежностью к одному из пяти уровней видимости класса, определяемых специальными ключевыми словами: public, Private, Protected, publishered, automated. По умолчанию видимость родительских членов класса наследуется в точности, однако разрешено повышать видимость – делать поля, свойства и методы более доступными. Понижение видимости не допускается.
Public – члены класса, описанные в этом разделе, доступны из любой точки программы.
Private – самые жесткие ограничения. Члены класса, описанные в этом разделе, доступны только в том модуле, к котором описаны.
Protected – видимость членов класса, расположенных в этом разделе, совпадает с видимостью раздела Private с единственным отличием. Члены класса раздела Protected доступны также внутри методов классов, являющихся наследниками данного класса и описанных в других модулях.
Published – поля, доступных для редактирования и изменения значений во время проектирования и из Инспектора Объектов. По видимости свойства не отличаются от членов классов, расположенных в разделе Public.
во время проектирования и из Инспектора Объектов. По видимости свойства не отличаются от членов классов, расположенных в разделе Public.
Automated – правила видимости этого раздела совпадают с правилами видимости для раздела Public.
Типы методов
Каждый метод класса может иметь дополнительные характеристики, определяющие, как будет реализовываться этот метод в классах-наследниках.
Статические методы. Все методы по умолчанию считаются статическими. Это означает, что их вызов будет происходить в соответствии с принципом полиморфизма.
Виртуальные и динамические методы. Статические методы удобны, когда в программе известно, какие типы объектов будут использоваться. Если в классах-наследниках методы должны быть перекрыты методами с одноименными заголовками. Вместо виртуального метода можно использовать динамический метод. Разница между виртуальными и динамическими методами заключается только в программной реализации. Виртуальные методы оптимизированы для максимального быстродействия, динамические – для максимальной экономии памяти.
Литература: Бобровский С. Delphi 5: учебный курс – СПб:Питер, 2001. – 640 с.: ил.

среда, 24 февраля 2010 г.

Самостоятельная работа по записям

Структуры и записи. Запись данных в файл и печать из файла

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

Решение

Программа для записи информации в файл

type z=record
f:string[20];
adres:string[30];
tel:string[15];
obraz:string[20];
oklad:real;
end;
var F:file of z;
sotr:array [1..3] of z;
i,n:integer;
begin
writeln;
write('Vvedite kol-vo zapisej o sotrudnikakh=');
readln(n);
assign(F,'c:\sotrudniki');
rewrite(f);
writeln('Vvedite svedeniya o sotrudnikakh');
for i:=1 to n do begin
write('Familija:');
readln(sotr[i].f);
write('Adres:');
readln(sotr[i].adres);
write('Telefon:');
readln(sotr[i].tel);
write('Obrazovanie:');
readln(sotr[i].obraz);
write('Oklad:');
readln(sotr[i].oklad);
write(F,sotr[i]);
writeln('----------------');
end;
Close(F);
end.
Программа для печати списка

type z=record
f:string[20];
adres:string[30];
tel:string[15];
obraz:string[20];
oklad:real;
end;
var F:file of z;
sotr:z;
i:integer;
s:integer;
begin
assign(F,'c:\sotrudniki');
reset(f);
writeln;
writeln;
writeln('Spisok sotrudnikov s vishim obrazovaniem ');
while not Eof(f) do
begin
read(F,sotr);
if sotr.obraz='vishee' then
writeln(sotr.f);
end;
Close(F);
readln;
end.
Данные позаимствованы на сайте

суббота, 20 февраля 2010 г.

Стуктуры и классы

Домашнее задание:
Составить массив из пяти записей следующей структуры:
Фамилия президента;
Страна;
Возраст;
Годовой доход;
Марка любимого автомобиля.
Рассортировать массив в алфавитном порядке по фамилии президентов и вывести информацию на экран.
Подсказка
Описать структуру подобно как в задаче на уроке.
Type
worker=record
surname:string[15];
year:word
end;
В описании структуры массива указать тип элемента записи, такого же типа должна быть переменная х. В процедуре сортировки в операторе if a[j-1]'>'a[j] then нужно указать уточненное имя поля. if a[j-1].surname'>'a[j].surname then, где surname - имя поля для хранения фамилии президента.
Type
ar=array[1..100] of real;
Var
a:ar;
n:integer;
Procedure BubbleSort(n:integer;Var a:ar);
Var
i,j:integer;
x:real;
Begin
For i:=2 to n do
For j:=n downto i do
if a[j-1]'>'a[j] then
Begin
x:=a[j-1];
a[j-1]:=a[j];
a[j]:=x
end
End;
РЕШЕНИЕ Д/З
Program n1;
type
prisedent=record
surname:string[30];{фамилия президента}
country:string[30];{страна}
year:word; {возраст}
doxod:longint; {годовой доход}
machine:string[30]; {марка любимого автомобиля}
end;
om=array[1..5]of prisedent;{массив записей}
var
a:om;
x:prisedent;{переменная для обмена}
i,j:integer;
begin
for i:=1 to 5 do
with a[i] do
begin {заполнение полей записи с клавиатуры}
readln(surname);
readln(country);
readln(year);
readln(doxod);
readln(machine);
end;
{Сортировка массива из 5 записей}
for i:=2 to 5 do
for j:=5 downto i do
with a[j-1] do {использовали оператор присоединения для a[j-1]}
if surname'>'a[j].surname then
begin
x:=a[j];
a[j]:=a[j-1];
a[j-1]:=x;
end;
for i:=1 to 5 do
writeln('prisedent',a[i].surname,a[i].country:20);
end.

среда, 17 февраля 2010 г.

Работа со строками

Program n1;
Uses crt;
Var
mst,st:string;
Procedure Poiskshot(Var st,mst:string);
Var
i,n,k,min:integer;
p:string;
Begin
n:=length(st);
i:=1;
min:=n;
mst:='';
While i'<='n do Begin While (St[i]=' ') and (i'<='n) do i:=i+1; p:=''; While (St[i]'<>'' ') and (i<=n) do Begin p:=p+St[i]; i:=i+1; End; if p'<>'''then
Begin
k:=length(p);
if k'<'min then begin min:=k; mst:=p; end; end; end; end; begin clrscr; Writeln('vvod stroki'); readln(st); st:=' '+st+' '; poiskshot(st,mst); Writeln(mst); end. st - данная строка символов
mst - самое короткое слово в строке
i - порядковый номер символа в строке
n - фактическая длина строки
k - фактическая длина слова
min - минимальная длина
p - слово