Инструменты пользователя

Инструменты сайта


subjects:programming:pascal:oop

ООП

Объектно-ориентированное программиирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов1), каждый из которых является экземпляром определённого класса2), а классы образуют иерархию наследования3).4)

Записи

Запись представляет собой набор элементов разных типов, каждый из которых имеет свое имя и называется полем записи.

Описание записей

Тип записи в классическом языке Паскаль описывается следующим образом:

record 
	описания полей
end

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

Пример

type 
	Person = record
		Name: string;
		Age: integer;
	end;

PascalABC.NET

Записи в PascalABC.NET имеет вид:

record 
	секция1  
	секция2  
	...
end

Каждая секция имеет вид:

модификатор доступа  
	описания полей
	объявления или описания методов и описания свойств

Отличие записей от классов

  • Запись представляет собой размерный тип.
  • Записи нельзя наследовать; от записей также нельзя наследовать.
  • В записи по умолчанию подразумевается модификатор public (все члены открыты), а в классе - internal.

Объекты и классы

Описание классов

Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств. Описание класса имеет вид:

type
	имя класса = class
		секция1  
		секция2  
		...
	end;

Каждая секция имеет вид:

модификатор доступа 
	описания полей
	объявления или описания методов и описания свойств

Модификатор доступа в первой секции может отсутствовать, при этом подразумевается модификатор internal (видимость всюду внутри сборки). Все описания и объявления внутри класса образуют тело класса. Поля и методы образуют интерфейс класса.

Классы могут описываться только на глобальном уровне. Локальные определения классов (т.е. определения в разделе описания подпрограмм) запрещены.

Пример

type
	Person = class
	//Person = class(BaseClass)				// Вариант с наследованием от BaseClass
	private
		fName: string;
		fAge: integer;
		class cnt: integer := 0;			// Классовое (статическое) поле — PascalABC.NET
	public
		class property Coun: integer read cnt;		// При описании статических свойств в секциях read и write можно указывать только статические поля или методы — PascalABC.NET
		constructor Create(Name: string; Age: integer);	// Конструктор
		begin						// Описание конструктора ВНУТРИ класса
			fName := Name;
			Self.fAge := Age;			// Переменная Self, ссылается на объект, вызвавший этот метод
			cnt += 1;				//
		end;
		//destructor Destroy;				// Деструткор
		class function Count: integer;			// Классовый (статический) Метод — PascalABC.NET
		begin						// Описание метода ВНУТРИ класса
			Result := cnt;
		end;
		procedure Print;				// Метод
		property Name: string read fName;		// Свойство
		property Age: integer read fAge;		// Свойство
	end;
 
procedure Person.Print;						// Описание метода ВНЕ класса
begin
	writelnFormat('Имя: {0} Возраст: {1}', Name, Age);
end;
 
begin
	var p0: Person := new Person('Иванов',20);		// Создание объекта
	var p1: Person := new Person('Петров',18);		// Создание экземпляра класса
	writeln(p1.Age);					// Обращение к свойству объекта
	writeln(Person.Count);					// Обращение к классовому методу Count — PascalABC.NET
end.

Методы

Методы представляют собой процедуры и функции, объявленные внутри класса или записи. Особыми разновидностями методов являются конструкторы, деструкторы и перегруженные операции.

Методы могут описываться как внутри, так и вне класса.

Свойства

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

property Prop: тип read имя функции чтения write имя процедуры записи;

Как правило, каждое свойство связано с некоторым полем класса и возвращает значение этого поля с помощью функции чтения, а меняет - с помощью процедуры записи. Функция чтения и процедура записи должны быть методами этого класса и иметь следующий вид:

function getProp: тип;
procedure setProp(v: тип);

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

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

Inc(p.Age); // ошибка!

Наследование

Класс может быть унаследован от другого класса. Класс, от которого наследуют, называют базовым классом (надклассом, предком), а класс, который наследуется, называется производным классом (подклассом, потомком). При наследовании все поля, методы и свойства базового класса переходят в производный класс, кроме этого, могут быть добавлены новые поля, методы и свойства и переопределены (замещены) старые методы. Конструкторы наследуются по особым правилам.

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

1)
Объект — некоторая сущность в компьютерном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними (методов).
Термины «экземпляр класса» и «объект» взаимозаменяемы.
2)
Класс — это элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию.
3)
Наследование — концепция ООП, согласно которой абстрактный тип данных может наследовать данные и функциональность некоторого существующего типа, способствуя повторному использованию компонентов ПО.
4)
Грэди Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ = Object-Oriented Analysis and Design with Applications / Пер. И.Романовский, Ф.Андреев. — 2-е изд. — М., СПб.: «Бином», «Невский диалект», 1998. — 560 с. — 6000 экз. — ISBN 5-7989-0067-3.
subjects/programming/pascal/oop.txt · Последние изменения: 2018/06/19 14:20 —

На главную страницу Обучение Wikipedia Тестирование Контакты Нашли ошибку? Справка

Записаться на занятия

Ошибка Записаться на занятия к репетитору

Телефоны:

  • +7 (910) 874 73 73
  • +7 (905) 194 91 19
  • +7 (831) 247 47 55

Skype: eduVdom.com

закрыть[X]
Наши контакты