Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GOS.pdf
Скачиваний:
172
Добавлен:
11.03.2015
Размер:
6.59 Mб
Скачать

Потенциальными источниками могут быть

a) Предыдущие разработки

b) Адаптация выявленных ранее объектов c) Апостериорное обнаружение объектов

d) Использование не объектно-ориентированных подходов e) Хранилище данных и файлы

f) Библиотеки классов g) Литература

Правило отброса объектов:

1. Вербальное имя объекта(инфинитив)

2. Объект реагирует лишь на 1 входное сообщение

3. Объект ничего не делает

4. Объект покрывает несколько абстракций

5 Общая характеристика классов в объектно-ориентированном программировании. Особенности реализации классов в различных объектно-ориентированных языках программирования.

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

Различают внутреннее представление класса (реальное) и внешнее представление (интерфейс).

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

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

Класс

Интерфейс:

Общедоступный ( public)

Защищенный (protected)

Приватный (private)

Реализация

Public – объявление этой части доступно всем. Protected – объявление этой части доступно только самому классу, его подклассам и «друзьям » класса. Private - объявление этой части доступно только этому классу или его друзьям. Класс- «друг» - класс, который имеет доступ ко всем частям этого класса.

Реализация класса включает реализацию всех операций, определѐнных интерфейсе класса.

TMyClass = class(TObject)

private

{Описанные в этой секции элементы не доступны извне (за пределами класса, но доступны в пределах модуля).}

{Здесь обычно находятся поля класса.} protected

{Описанные в этой секции элементы доступны только классу и всем его потомкам.}

public

{Описанные в этой секции элементы доступны всем.} published

{Описанные в этой секции элементы доступны всем и отображаются в

Object Inspector'e.} end;

TMyClass — имя класса;

class — ключевое слово, начинающее определение класса;

TObject — класс-предок, если есть наследование;

private, protected, public, published — ключевые слова, обозначающие секции областей доступа.

Создается экземпляр класса:

MyClass := TMyClass.Create;

Уничтожается:

MyClass.Free;

Классы в языке С++

Создаются следующим образом:

class MyClass: public ParentClass // ParentClass — класс-предок, если таковой имеется

{

public:

// элементы в этой секции доступны из любой части программы

MyClass(); // конструктор

~MyClass(); // деструктор

protected:

// элементы в этой секции доступны из класса и его потомков

private:

// элементы в этой секции доступны только из класса; это область доступа по умолчанию };

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

MyClass myinstance;

Обращение к членам класса:

myinstance.classmember

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

Классы в языке Java

Определение класса на языке Java с помощью оператора class:

class MyClass {

String name = "Example";

// "Конструктор"

public MyClass(String name) {

this.name = name; }

// "Метод"

public String getName() {

return name;

} }

Создание экземпляра класса:

MyClass my = new MyClass("Example 2");

Уничтожение экземпляра класса происходит с помощью «сборщика мусора» автоматически.

6Виды отношений между классами в объектно-ориентированном программировании. Использования языка UML для представления отношений между классами.

Виды отношений между классами:

1). Ассоциация – семантическое (смысловое) соединение классов. Выделяют следующие виды ассоциаций: «один ко многим», «многие ко многим» (У еврейской жены один муж, у еврейского мужа одна жена. У восточной жены один муж, у восточного мужа много жѐн. В здании может находиться сколько угодно человек, человек может посещать сколько угодно зданий. ). Мощность ассоциации

– порядок отношения (многие ко многим, один к одному, один ко многим).

2). Наследование – отношение, при котором один класс разделяет структуру и поведение, определенное в одном другого или во многих других классах. Наследование определяет иерархию вида ‗is a‘ (является), при котором подкласс наследует от одного или несколько более общих суперклассов. Подкласс является спецификацией суперкласса за счѐт добавления или переопределения существующей структуры или поведения.

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

Конкретный класс – класс, объект которого может существовать в системе.

Класс может наследовать свойства и операции, определѐнные в одном базовом классе (одиночное наследование) или определѐнное в нескольких базовых классах (множественное наследование). Множественное наследование позволяет объединять характеристики различных классов в одном.

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

3). Агрегация. Отношение агрегации между классами аналогично отношению агрегации между объектами. Агрегация может быть определена как:

1.включение по величине, пример физического включения, означает, что объект не существует, не зависимо от включающего его экземпляра. Т. е. время жизни двух объектов неразрывно связано (композиция).

2.включение по ссылке, при этом экземпляры каждого класса уничтожаются, не зависимо: сцепление объектов уменьшено.

4). Зависимость – отношение, которое показывает, что изменения в одном классе могут влиять на другой класс, который использует его. Наиболее часто зависимость показывает, что один класс использует другой класс как аргумент своей операции.

В языке UML определены следующие типы отношений: зависимость , ассоциация , обобщение и реализация . Эти отношения являются основными связующими конструкциями UML и также как сущности применяются для построения моделей.

1. Зависимость (dependency) - это семантическое отношение между двумя сущностями, при котором изменение одной из них, независимой, может повлиять на семантику другой, зависимой.

Графически представляется пунктирной стрелкой, идущей от зависимого элемента

к тому, от которого он зависит.

2.Ассоциация (association) - структурное отношение, описывающее совокупность смысловых или логических связей между объектами.

3.Обобщение (generalization) - это отношение, при котором объект специализированного элемента (потомок) может быть подставлен вместо объекта обобщенного элемента (предка). При этом, в соответствии с принципами объектноориентированного программирования, потомок (child) наследует структуру и поведение своего предка (parent).

4. Реализация (Realization) - это семантическое отношение между классификаторами, при котором один классификатор определяет "контракт", а другой гарантирует его выполнение. Отношения реализации встречаются в двух случаях: во-первых, между интерфейсами и реализующими их классами или компонентами, а во-вторых, между прецедентами и реализующими их кооперациями.

Графически реализация представляется так же, как и наследование, но с пунктирной линией.

7Реализация принципов объектно-ориентированного программирования в языках программирования высокого уровня.

1). C++

В C++ программист обычно помещает определение класса в файл объявлений, а определение методов — в отдельный файл кода. Обычно у этих двух файлов одинаковые имена и различные расширения. Компилируемый блок, как правило, ссылается (включает в себя) на свой файл объявлений и на файлы объявлений тех классов (или функций), на которые ссылается код.

если у нас есть класс MyClass с методом MyMethod, мы можем написать:

MyClass Obj;

Obj.MyMethod();

и получить объект класса MyClass с именем Obj. Память для этого объекта обычно выделяется в стеке, и вы можете сразу начать использовать объект, как это сделано во второй строке.

Также возможно выделить память для объекта в куче и оперировать указателем на объект:

MyClass *obj = new MyClass();

obj->MyMethod();

delete obj;//освобождаем память

Вот C++ синтаксис определения простого класса:

class Date {

private:

int dd;

int mm;

int yy;

public:

void Init (int d, int m, int y);

int Day ();

int Month ();

int Year (); };

А вот определение одного из методов:

void Date::Init (int d, int m, int y)

{dd = d; mm = m; yy = y; }

ВC++ вы можете использовать ключевое слово friend для обхода инкапсуляции. Видимость по умолчанию для класса — private, для структур — public.

2)Java

MyClass Obj;

Obj = new MyClass();

Obj.MyMethod();

Прежде чем использовать объект, вы должны вызвать "new" для выделения под него памяти. Конечно, вы можете объявить и проинициализировать объект в одном предложении, избегая использования неинициализированных объектных дескрипторов:

MyClass Obj = new MyClass();

Obj.MyMethod();

Синтаксис Java похож на синтаксис C++:

class Date {

private int dd = 1;

private int mm = 1;

private int yy = 1;

public void Init (int d, int m, int y) {

dd = d; mm = m; yy = y;}

public int getDay () {return dd;}

public int getMonth () {return mm;}

public int getYear () {return yy;} }

Основная разница состоит в том, что код каждого метода пишется там же, где он объявляется (при этом функции не становятся вставными (inline), как в C++), и в том, что вы можете инициализировать элементы данных класса. Фактически, если вы не сделаете этого, то Java проинициализирует все элементы данных за вас, используя значения по умолчанию.

В Java отличие синтаксиса в том, что модификатор доступа повторяется для каждого элемента класса. А конкретнее, по умолчанию в Java используется friendly, это значит, что элемент видим для других классов этого же пакета (или файла исходного кода, как в OP). Подобным образом, protected означает видимость для подклассов, тогда как комбинация private protected соответствует protected в C++.

3)Object Pascal

В Object Pascal каждый файл исходного кода называется unit, и он делится на две части: интерфейс и исполнение, отмечаемые соответственно ключевыми словами interface и implementation. Секция интерфейса включает в себя определения классов (с объявлениями методов), а секция исполнения должна включать в себя определения методов, объявленных в интерфейсе. Писать фактический код в секции интерфейса нельзя. Вы можете сослаться на объявления другого файла, используя предложение uses. Этим включается в компиляцию интерфейс того файла:

uses

Windows, Form, MyFile;

В Object Pascal синтаксис определения класса другой, но похожий скорее на C++, чем на Java:

type

Date = class

private

dd, mm, yy: Integer;

public

procedure Init (d, m, y: Integer);

function GetMonth: Integer;

function GetDay: Integer;

function GetYear: Integer;

end;

procedure Date.Init (d, m, y: Integer);

begin

dd := d;

mm := m;

yy := y;

end;

function Date.GetDay: Integer;

begin

Result := dd;

end;

В Object Pascal private и protected относятся только к классам других юнитов. В терминах C++, класс является дружественным для любого другого класса,

определенного в том же юните (или файле исходного кода). В Delphi есть еще один модификатор доступа — published, который генерирует информацию времени выполнения (RTTI) об элементах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]