Рейтинг@Mail.ru
Menu
Скачать картинки на телефон бесплатно.
Заставки для телефона, аватарки.
(Вырезать из фотографии)

Роза `Гренд Могул` Яхта `Алиса` Лесное озеро Музей `Пирогово` Белочка
Выберите рубрику (тему)

Тема: Объектное программирование

Программа 13

  Тип объект содержит:
    -  поля: вектор, его размер и его идентификатор в символьном виде
    -  методы: введение вектора, вывод вектора, сортировка за ростом элементов вектора.
Реализовать экземпляр этого типа и выполнить над ним все возможные действия

Текст программы

program Prg13;
{ http://nataliya.kiev.ua }
uses crt;
type TMas=array[1..10] of real;
  TVector=object
    Mas:TMas;
    n:byte;
    id:char;
    procedure inp;
    procedure out;
    procedure sort;
    end;
var vect:tvector;
procedure TVector.inp;
var i:byte;
begin
  Writeln('Enter identificator of vector (One symbol) :');
  Write('id=');
  Readln(id);
  Writeln('Enter number of elements of vector ',id,' :');
  Write('n=');readln(n);
  writeln('Enter elements of vector ',id,' :');
  for i:=1 to n do
    begin Write(id,'[',i,']=');readln(mas[i]); end;
end;
procedure TVector.out;
var i:byte;
begin
  Writeln('Vector ',id,' :');
  for i:=1 to n do
    writeln(id,'[',i,']=',mas[i]:0:3)
end;
procedure TVector.sort;
var i,j:byte;
  b:real;
begin
for i:=n-1 downto 1 do
  for j:=1 to i do
    begin
    if mas[j]>mas[j+1] then
      begin
      b:=mas[j];
      mas[j]:=mas[j+1];
      mas[j+1]:=b;
      end;
    end;
end;
begin
  clrscr;
  vect.inp;
  vect.sort;
  vect.out;
  readkey;
end.

Результат работы программы

1)
Enter identificator of vector (One symbol) :
id=a
Enter number of elements of vector a :
n=5
Enter elements of vector a :
a[1]=1
a[2]=4
a[3]=2
a[4]=7
a[5]=8
Vector a :
a[1]=1.000
a[2]=2.000
a[3]=4.000
a[4]=7.000
a[5]=8.000
2)
Enter identificator of vector (One symbol) :
id=q
Enter number of elements of vector q :
n=3
Enter elements of vector q :
q[1]=2.1
q[2]=5.9
q[3]=2.1
Vector q :
q[1]=2.100
q[2]=2.100
q[3]=5.900

Теория к программе

Объектное программирование
  В рамках концепции ОПП данные и методы их обработки (программы) объединяются в единые структуры - так называемые объекты. Кроме того объектам присуще важное качество: если существует некоторый класс объектов (прародитель предок), на его базе может быть построено, "выделено" иной подкласс (наследник потомок), который автоматически наследует все свойства предка (в отношении к данным и средствам работы с ними).
  Объект определяется типом 'объект', или классом объекта, который описывается в разделе описи типов программы и имеет вид:
    Type <идентификатор типа>=object
      <поля объекта>;
      <методы>
      end;
  <поля объекта>
- содержат объявление наборов логически связанных данных разного типа
  <методы> - содержат объявление процедур и функций работы с этими данными.
  Такое объединение в единой структуре данных и методов называется инкапсуляцией.
  Объект-переменная или экземпляр
- переменная объектного типа, описание:
    var <экземпляр>: <идентификатор объекта>;
      - описание типа 'объект' может быть выполнено только в блоке TYPE главной программы или в разделах модулей (т.е. невозможно описывать локальные объекты)
      - при описании типа 'объект' все поля данных должны предшествовать описаниям методов
      - компонентами объектов не могут быть файлы (файловые переменные). Данные типа объект не могут быть записаны в файл.
  Наследование - это возможности создавать новые классы объектов на базе уже существующих и таким образом предоставлять новым классам - 'наследникам' право наследования свойств (полей) и методов существующих классов - 'прародителей'. 'Наследники' рассматриваются как подчиненные (зависимые от) 'прародителей'. 'Наследник' иногда называется производным типом. Такая структура реализуется с помощью следующей конструкции:
    type <имя объекта - наследника>=object(<имя объекта - прародителя>)
      <дополнительные поля наследника>
      <дополнительные методы наследника>
      end;

  В операциях предоставления прародитель всегда должен находиться слева, так как количество его полей всегда меньша или равняется количеству полей наследника
    <прародитель>:=<наследник>;
  Полиморфизм
- это существование нескольких одинаковых по именем но разных по смыслу методов (процедур или функций) для разных классов объектов. Благодаря этому становится возможным выполнить одну и ту же самую операцию с объектами разных классов с учетом их специфики.
    Обработка статических методов похожая на обработку статических переменных, т.е. ссылка на эти методы формируются на стадии компиляции (раннее связывание).
    Для реализации полиморфизма в полной мере используются виртуальные методы.
  Виртуальным метод становится после того, если после его заголовка указывается служебное слово VIRTUAL:
    procedure <имя>(<параметры>); virtual;
    function <имя>(<параметры>):<тип>; virtual;

  При 'виртуализации' - объявлении метода виртуальным - следует придерживаться правил:
    1. Если порождаемый тип объекта описывал метод как виртуальный, то и все производные типы, которые переопределяют метод с тем самым именем, должны описывать его как виртуальный.
    2. Если переозначается виртуальный метод, то его заголовок в новой реализации в произвольном типе не может быть изменен.
    3. В описи объекта должен обязательно присутствовать присутствующим метод, который инициализирует объект (как правило с именем init) - Заголовок в объявлении и реализации вместо procedure употребляется служебное слово constructor.
  Конструктор
- это специальный вид процедуры, которая выполняет установочную работу по виртуализации метода (обеспечение так называемого позднего связывания). Все типы объектов, которые имеют виртуальные методы, должны содержать конструктор. Конструктор всегда вызывается к первому вызову виртуального метода.
    Объекты могут быть размещены в динамической области памяти, для этого они должны быть объявлены как и все другие динамические структуры.
      Var <указатель на объект>:^<тип объекта>;
  Создание динамических объектов происходит
    с помощью процедуры NEW
      а) NEW(<указатель на объект>);
      -при этом выделяется место для сохранения базового типа. Если есть виртуальные методы, то динамический объект должен быть инициализован:
        <указатель>^.<конструктор>(<параметры>);
      б) расширенный вариант с выполнением инициализации объекта:
        NEW(<указатель>,<конструктор>(<параметры>));
      в) реализация NEW в виде функции:
        <указатель>:=new(<тип указательа>);
или: <указатель>:=new(<тип указатель>,<конструктор>(<параметры>));
  Освобождение объектов происходит
    а) с помощью процедуры dispose:
      dispose(<указатель>);
    б) или расширенный вариант процедуры:
      dispose(<указатель>,<деструктор>);
    Деструктор
- специальная процедура, объявляется в описании типа объект среди других методов. Вместо procedure употребляется зарезервированное слово destructor, как правило эта процедура носит имя done ('выполнено'). Назначение - заключительные действия перед освобождением объекта (например, действия по освобождению динамично распределенных полей). Деструктор может наследоваться.
      destructor <имя объекта>.done;
      begin . . . end;


Случайный анекдот

Решили инженеры выполнить мечту Билла Гейтса - поставили "Винды" на холодильник. Запустили - работает. Поставили внутрь кастрюлю борща. Глядь - сообщение:
- Обнаружено новое устройство "Кастрюля (4 л) красная". Будем устанавливать?
Дата: 20-11-2004   Автор: Admin   Подрубрика: Microsoft