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

Использование объектно-ориентированной методологии для создания сложных программных систем. Характеристика интерфейсной части класса. Проведение операций расширения области видимости в С++. Особенность изучения унифицированного языка моделирования.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 27.03.2016
Размер файла 208,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Объектно-ориентированная методология

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

Структуру и поведение сложных объектов определяет общий для них класс.

Термины экземпляр класса и объект взаимозаменяемые понятия.

Состояние объекта характеризуется перечнем всех возможных (обычно статических) свойств данного объекта и текущими значениями (обычно динамическими) каждого из этих свойств.

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

Поведение. Объект не существует изолированно, а подвергается воздействию или сам воздействует на др. объекты. Поведение характеризует то, как объект взаимодействует или подвергается воздействию др. объектов с точки зрения изменения состояния этих объектов и передачей сообщений. Т.е. поведение объекта полностью определяется его действиями. Как правило, в ооя операции, выполняемые над данным объектом, называются методом и входят составной частью в определение класса. Известно 5 основных видов операций над объектами: 1. модификатор - операция, которая изменяет состояние объекта путем записи или доступа; 2. селектор - операция, дающая доступ для определения состояния объекта без его изменения (операция чтения); 3. итератор - операция доступа к содержанию объектов по частям; 4. конструктор - операция создания или инициализации объекта; 5. деструктор - операция разрушения объекта и освобождения занимаемой им памяти.

В си++ формат определения конструктора в теле класса может быть. имя_класса(<список формальных параметров>)

{оператор тела конструктора}

Имя этой компонентной функции должно совпадать с именем класса. Такая функция автоматически вызывается при определении или размещении в памяти с помощью операция new каждого объекта класса. Осн. предназначение конструктора - инициализация объектов. В соответствии с синтаксисом языка для конструктора не определяется тип возвращаемого значения. Даже тип void недопустим.

С помощью параметров конструктора могут быть переданы любые данные необходим для создания и инициализации объектов класса.

Class node

{public;

Int code;

String str;

Node(int y, char *x)

{}}

Class name

{private

Type data1;

Return type function1(parameter list)

Protected: Type data1;

Return type function1(parameter list)

Public

Name (parameter list a) // 1-ый конструктор

Name (parameter list b) // 2-ой конструктор }

В первом примере в описании класса один конструктор во втором 2. Перегруженные конструкторы должны отвечать тем же требованиям, что и основные функции. Конструктор может иметь пустой список параметров. Начальное значение для любого элемента могут задаваться в списке инициализации элементов конструктора. Список инициализации элементов отделяется от аргументов двоеточием.

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

Node( int c, char *s): code(c), Str(s) {}

Без явного указания программиста конструктов всегда автоматически вызывается при определении (создании) объектов класса.

Динамическое выделение памяти для объектов какого-либо класса создает необходимость в освобождении объекта. Желательно что бы освобождение происходило автоматически. Такую возможность обеспечивает деструктор.

~имя_класса(){оператор тела деструктора}

У деструктора не может быть параметров даже типа void. Он не имеет возвращаемого значения.

Любой метод является операцией, но не любая операция является методом.

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

Индивидуальность. Это такие свойства объекта, которые отличают его от других объектов. Источником множества ошибок ООП является невозможность отличить имя объекта от самого объекта.

Сделаем следующие определения на object pascal

Tpalleteitem=object(tobject)

Kid: integer;

Kframe: rect;

Procedure Tpalleteitem.initializ(kid:integer, frame:rect);

Procedure Tpalleteitem.free

Procedure Tpalleteitem.Draw(area:rect);

Procedure Tpalleteitem.Highlirgt(From, Ton1:HL Static)

Funcrion Tpalleteitem.ismousehit(the mouse:point):Boolean; End;

Tpalleteitem является определением класса и должно быть приведено в разделе описания типа. Объявить объекты (экземпляры) такого класса можно след образом.

Item_1, item_2, item_3 : Tpalleteitem.

Может быть и массив объектов. В рез-те такого объявлении такого объявления в памяти зарезервировано 3 области.

item1 item2 item3

undefined undefined undefined

Переменные, начальные значения которых не определено.

Для создания самих объектов необходимо в явном виде использовать процедуру new().

New(Item1); New(item2)

Выполнение каждой процедуры создает отдельный объект. Т.к. указанные процедуры не инициализируют состояние объекта, это нужно сделать специально.

setRect(Arect,1,1,32,32)

Item1.initialize(1001,Arect);

setRect(Arect,1,1,32,64)

Item2.Initialize(1002,Arect);

item1 item2 item3

Свойство индивидуальности сохраняется даже при полном изменении состояния.

Item2.kid:=1003;

New(item3);

setRect(Arect,1,1,32,64);

Item3.initialize(1003,Arect);

Объект обозначенный item2 по-прежнему существует, хотя его состояние изменилось. Был создан новый объект item3, отличный от item2, хотя их состояние одинаково.

Что произойдет если присвоить item1:=item2

Результат нежелателен. Объект item1 становится недоступным. Он навсегда потерян и превращен в мусор.

Имена item1 и item2 обозначают один и тот же объект. Такая ситуация называется структурная неопределенность и означает, что один объект имеет несколько имен. Структурная неопределенность может иметь опасные последствия, т.к. позволяет изменить состояние объекта через первое имя, скрыт этот факт от объектов, использующих другое имя. Что бы избежать структурной неопределенности используют, например, метод clone или другие.

Время существования объекта.

Начало времени существования любого объекта - момент его создания: (отведение участка памяти), а окончание - момент изъятия отведенного участка памяти.

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

Отношения между объектами.

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

На этом рисунке линия между двумя объектами обозначает наличие отношения между ними и подразумевает возможность передачи сообщений по этой линии (например, от Controller к escalator). Пересылка сообщений между объектами обычно однонаправленная, но возможны и двунаправленные связи. Каждый объект, включенный в отношения использования, может выполнять следующие три роли: 1. воздействие - объект может воздействовать на др. объекты, но сам никогда не подвергнется воздействию других объектов (в этом смысле соответствует понятию активный объект);

2. исполнение - объект может только подвергаться управлению со стороны др. объектов, но никогда не вступать в роли воздействующего объекта;

3. посредничество - такой объект может выступать как в роли воздействующего, так и в роли исполнителя.

Отношение включения

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

Классы.

Класс выполняет роль соглашения о связях. Приходим к разделению внутреннего и внешнего проявления класса.

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

Реализация класса составляет его внутреннее проявление и определяет особенности поведения. Интерфейсная часть класса может быть разделена на 3 составные части:

1.общедоступная - в ней даются определенное видимые для всех объектов, относящихся к подклассам данного класса.

2. защищённая - в ней даются определения, видимые только для объектов относящихся к подклассам данного класса.

3. обособленная - часть, скрытая для объектов др. классов.

Пример: создание регистрационной записи о персонале.

class Personnelrecord {

public:

char * employeeName( );

int employee Social Security Number( );

char * employeeDepartment( );

proteсted:

Void getEmployeeName(char* name);

Void getEmployeeSocialSecurityNamber (int namber);

oid getEmployeeDepartment(char* department);

Void getEmployeeSalary(float salary );

float Employee Salary ( ) const;

private:

char * name [100];

int. Social Security Number;

char* department [10];

float Salary ; };

Класс - множество элементов и операций над ними. Класс - возможность хранить новые структуры. Он содержит элементы, операции, процедуры, функции.

Определены 3 объекта.

Reconnel Record

Masha, Sasha, Ivan;

Обращаться к компонентам можно следующим образом.

Имя_ объекта. имя класса:; имя компонента;

Имя_объекта. имя_компонента.

При этом возможности те же, что и при работе с эл-ми структуры.

Ivan.Salary=…;

Другой способ дступа к эл-там объекта - явное использование указателя на объект класса.

<ук-ль_на_объект_класса> <имя _эл-та >

< ук-ль_на_объект_класса> <обращение_к_компоненте_ф-ии>

Защищённые (protected) компоненты классов нужны только в случаи построения иерархии класса. Все компоненты класса с определением класса являются собственными (private), т.е. недоступными для внешнего обращения.

Отношения между классами. Типы отношений.

Рассмотрим классы для следующих объектов: цветы маргаритки, желтые розы, красные розы, лепестки.

Маргаритка - вид цветка.

Розы - др. вид цветка.

Красные и желтые розы - разновидность розы.

Лепестки - часть обоих видов цветков.

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

Отношения классов могут влиять на семантику связи между ними. Между жёлтой и красной розой больше сходства, чем между маргаритками и розой. А между розой и маргаритками больше чем между лепестками и цветами.

Есть 3 типа отношения между классами.

Разновидность - роза есть разновидность цветов, т.е. роза более специализированный подкласс классов цветов.

Составная часть - лепесток не разновидность цветов, а его сост. часть.

Ассоциативность - смысловая часть между классами, кот. не связаны не с какими др. типами отношений.

Класс маргариток и класс роз достаточно независимы и которые соответствует объектам, которые можно поставить в вазу.

Языки ООП реализуют следующие механизмы отношения классов.

Наследование, использование, представление, метаклассы.

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

Для описания агрегативности (составная часть) необходимо описать отношения использования.

Отношения представления охватывают обобщение и ассоциативность.

Меттакласс - класс классов, позволяющий трактовать классы, как объект.

Отношения наследования.

Подкласс может наследовать, как структуру, так и поведение от своих суперклассов.

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

Например:

class Telemetry Data

{ public

telemetry Data ( );

virtual~Telemetry data( );

virtual void send( );

time current Time ( ) const;

protected;

int. id;

private

Time timestamp; };

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

Эл-т id определён в защищённой части описания и видим только для класса telemetrydata, в тоже время общедоступная функция currenttime позволяет всем объектам получить значение time, но изменить его при этом невозможно. Написан квалификатор const.

class Electrical data : public telemetry Data

{ public :

Electrical Data (float V1, float V2 , float a1, float a2),

Virtual~electricaldata( );

Virtual void send( );

float current power( ) const;

Protected:

Float fuel cell. 1voltage ,

Fuel cell 2 voltage;

Fuel cell1 amperes,

Fuelcell 2 Amperes;};

Этот класс образован наследованием класса telemetrydata, но исходная структура дополнена 4-мя новыми элемантами, а поведение переопределено (изменена функция send).

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

Наследование - такое отношение между классами, когда 1 класс повторяет структуру и поведение другого (простое наследование) или др. классов (множественное наследование).

Класс структура и поведения кот. наследуется называется суперклассом.

Так telemetryData является суперклассом по отношению к electricData.

Производный от суперкласса класс называется подклассом. По отношению к TelemetryData

Electrical Data является более специализированным классом от более общего telemetryData.

Это отношение простого наследования от суперкласса telemetryData, для некоторых классов будут созданы экземпляры объектов, а для др. не будут. Наиболее вероятно образование объектов из наиболее специализированных классов : electricalData и spectrometerData.

Образование объектов из класса более общего назначения SensorData и TelemetryData менее вероятно. Такие классы для кот. не определены реализации объектов называют абстрактными классами.

Самый общий класс в структуре класса называется базовым классом. В большинстве приложений базовый классов бывает несколько. В некоторых ЯП определен базовый класс самого верхнего уровня, кот. является единственным суперклассом для всех остальных классов.

Для любого класса обычно определяется 2 вида пользователей:

экземпляр данного класса.

Производные подклассы.

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

Наследование подразумевает повторение структуры суперкласса. Так экземпляры класса electriclaData содержат элементы структуры суперкласса, элементы специлизированного класса (FiLCELL voltage). Между наследованием и ограничением доступа реальное противоречие; поведение суперклассов также наследуется.

В ООЯ допускается не только наследование методов суперклассов, но также исключение, добавление новых и переопределение существующих.

Отношение использования.

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

Рассмотрим отношение между библиотекой и книгами. Библиотека не являетсяся разновидностью книг, а объединяет их.

Tlibrary = object (Tobject)

Procedure Tlibrary Initalite ;

Procedure Tlibrary. Cheekout(Abook: Tbook);

Procedure Tlibrary. Cheekin(Abook: Tbook);

End;

Компиляцию описания этого класса можно осуществить только после компиляции класса Tbook. Т.к. он входит в интерфейс класса Tlibrary. Для класса Tlibrary использование класса Tbook означает, что Tlibrary видимо для Tbook. 3а интерфейс и реализация Tlibrary могут обращаться к интерфейсу, но не к реализации Tbook.

Например, реализрвация метода checkout подразумевает посылку сообщения объекту abook. Что бы изменить состояние этого объекта (установление метки о прохождении контроля).

Например, код функции выполняющий контроль книг в библиотеке должен быть видимым как для класса Tlibrary (вызов функции checkout), так и для Tbook (чтобы сослаться на объект этого класса.

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

Для этого класса необязательно соблюдать требования видимости для интерфейса Tlibrary, достаточно условие видимости для реализации Tlibrary.

Рассмотрим ситуацию когда любая библиотека может состоять из n книг, но каждая книга имеется только в1-й библиотеке - это пример отношения 1:n .

В другом случаи можно допустить, что в каждой библиотеке имеется определенная коллекция и существует только в 1-й библиотеке это пример отношения 1:1.

интерфейс реализация

Возможно отношение n:m.

Множественное наследование часто приводит к проблемам отношениях использования. Можно определить класс telephone путем наследования классов, соответствующих клавиатуре, микрофону, громкоговорителю.

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

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

Отношение наполнения.

Множество является примером сборного класса. Сборные классы могут быть однородными: состоять из 1-го класса или неоднородными: состоять из объектов разных классов, имеющих общий суперкласс. Наиболее часто встречаются такие виды сборных классов как стек, список, множество, граф.

Значение отношения наполнения между классами.

Существует 4 основных способа построения сборного класса:

использование макроопределений (С++)

наследование и позднее связывание по нему. (Создают только однородные сборные классы).

Традиционный для Object Pascal (создаётся обобщенный сборный класс).

В механизме параметризованного класса (класс составляющий основание для размещения др. классов)

Отношения наполнения почти всегда сопровождается отношениями использования. Механизм наследования является более мощным средством, чем механизм обобщения и многие свойства обобщения и многие свойства обобщения достигаются путём наследования, но не наоборот.

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

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

Методология ООП

Определяется функциональными характеристиками.

- инкапсуляция.

- объединение записей с процедурами и функциями, что превращает их в новый тип данных (объекты).

- наследование - определение объекта с последующим использованием его для построения иерархии.

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

ООтехнологии лучше осваивать на 2х уровнях: общем и конкретном (на основе конкретного яп).

ООП может эффективно использоваться, если ему предшествует ООА отдачи. Без ООпроекта попытки применения ООП мало эффективны и трудоемки.

Стили программирования и методология ООП.

Стили программирования - способ построения программы, основанный на определённых

принципах программирования и выбора языка с целью добиться понимания программы. Определяется 5 основных разновидностей стилей программирования:

1) процедурно-ориентированный (абстракции, алгоритмы)

2) объектно-ориентированный (классы, объекты)

3) логически-ориентированный (вычисление предикатов, реляционное исчисление)

4) ориентированный на правилах (правила если … то … (проектирование без знаний))

5) ориентированный на ограничении (инвариантное соотношение) функциональное программирование.

Нельзя назвать какой-либо один стиль наилучшим во всех областях практического применения. Объектно-ориентированный стиль является приемлемым для больших программных систем.

Операции расширения области видимости.

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

Float r=2.6;

Int increment (int r)

{int r = k+15;

Cout<<”в функции increment:значение r внутри increment”<<r;

Cout<<”в функции increment:значение r вне increment”<<::r;

Return n;}

Main()

{int r = increment (20);

Cout<<”в функции increment:main r внутри increment”<<r;

Cout<<”в функции increment:main r вне increment”<<::z;…}

=35

=2.6

В main=35 =2.6

При внешнем определении компонентной функции в теле класса помещается ее прототипы.

Тип имя_функции (спецификатор и инициализация параметров)

В теле класса помещается в прототипы.В не тела …

Тип имя-класса:: имя_функции(Спецификации формальных параметров)

{тело принадлежит классу функций}//содержимое файла вложено определиния функции члена class name.

#include “className.h”

Returntype name:: function1(parameter list)

{statement s1}

Return type name:: function2(parameter list)

{statements 2;}

Name::name (parameter_list_a)

{statements;}

Name::~name(void)

{staments;}

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

Статистические компоненты класса инициализации можно использовать в программе еще до определения объектов данного класса.

Именные константы

Ключевое слово const может быть добавлено к объявлению объекта.

Const int model=90;

Const int v[]={1,2,3,4};

Так как константе ничего нельзя присвоить, она должна быть инициализирована. Объявление чего-нибудь как const гарантирует, что его значение не изменится в области видимости.

Model=200;//error

Model++;//error

Const изменяет тип, т.е ограничивает способ использования объекта вместо того, чтобы задавать способ размещения константы.

Const char *peek(int)// возврат указателя на константу

{return hidden[i];}

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

Const char * pc=”asdf”; //указатель на конст

Pc[3]='a';//error

Pc=”ghjk”;//ok

Чтобы создать сам указатель на константу используем *const

Char *const cp=”asdf”;//константный указатель

Чтобы сделать константами и указатель и сам объект их оба надо описать как const

Const char* const cpc=”asdf”;//константный указатель на константу

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

Char *strcpy (char* p, const *q);//не может менять q

Указателю на константу можно присвоить адрес переменной но нельзя присвоить адрес константы указателю на который не было наложено ограничения что он является константой

Int a=1;

Const int c=2;

Const int* p1=&c;//ok

Const int*p2=&a;//ok

Int *p3=&c;//error

*p3=7;//меняется знач переменой с

Константу можно описать другим способом

Enum {chocolate,vanilla,strawberry};

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

Enum Fruct {orange,cherry,banana}

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

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

Тип_возвращаемого_знач operator знак_операции (спецификация параметров операции функции)

{операторы типа операции функции}

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

sTroke & operator + (stroka &a, stroka &b) -конкатенация строк

вызов x+z+y или c=operator+(x,y);

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

?:, ::, sizeof…

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

Иерархия классов позволяет определить новые классы на основе уже имеющихся. Имеющиеся классы обычно зовут базовыми, а новые -пользовательскими. Допускается множественное наследование. Возможность наследовать компоненты, несвязанных между собой базовых классов

Производный(пользовательский) класс-

Class s:x,y,z {…};

Класс s порожден классами x,y,z откуда он наследует компоненты. Наследование компонента не выполняется, если он его имя будет использовано в определении класса s. Класс называется непосредственным. Прямым базовым классом, если он входит в список при определении класса. Ко для производного класса могут существовать косвенные и непрямые предшественники. Наличие нескольких прямых базовых классов называют множественным наследованием. Определение базовых классов должны предшествовать их использованию.

Class A{public: void f();…};

Class B{public: void f();..};

Class c:A,B,{…}

c.f()//error

c.A::f()//ok

Более удобно разрешить такую неоднозначность перекрытием в производном классе обеих функций.

Class c: A,B

{…

Public:

Void f() {A::f();B::f();…}//перекрывает обе функции.. };

c.f();//Правильно

Для классов, порожденных от производных классов с общей базой по умолчанию существует 2 экземпляра общей базы

Class x {int I;…};

Class A: public {…};

Class B: public x {…};

Class C: public A, public B{…}

Чтобы устранить дублирование объекта непрямого базового класса при множественном наследовании. Этот базовый класс объявляет виртуальным с помощью ключевого слова virtual

Class v{int I;..};

Class A: virtual public v{..};

Class v: virtual public v{..};

Class c: public A,public B {…};

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

Class phone

{…

Public:

Virtual void GiveDiolTone();//виртуальная функция…};

Class payphone : public Phone

{int centsDeposited

Public: PayPhone(int area, int change,int line);

Void GiveDiolTone();

Int AcceptCoins();…};

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

Virtual Draw()const=0

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

Шаблоны классов

Аалогично определению шаблонов функции

Template <список парам шаблона>

Шаблон семейства класса определяет способ построения отдельных объектов. В определении класса, входящего в шаблон особую роль играет имя класса. Оно является не именем отдельного класса, а параметизированным именем семейства класса

Template <class T> class stack

{t*v; //указат на некоторый тип Т

Int sizeof,top;

Public: stack (int ezis);

~stack();

Void push(const T&);//Поместить в стек

T& Pop();//Извлечь из стека

..;

Stack <int> I ; //стек для int

Stack<char*>cp//стек для char

Класс, содержащий набор элементов некоторого типа обычно называют классом-контейнером или просто контейнером. Иерархия классов - отношение является контейнерный класс. Отношение содержит. Пример обоих концепций: собака является псовым, но содержит хвост.

Они реализованы через определение базового класса comine, производного класса Dog и класса Tail, экземпляр которого содержится в comine.

//Интерфейс классов Comine и Tail

class Tail

{private:

Int Length;

public: Tail (int of lnght) {}

class Cantine ---нет куска

privat:

Tail tail;

int waight;

int age; // месяцы

char elar;

public

Объектно-ориентированный анализ и проектирование.

Для объектно-ориентированного анализа и проектирования нужен свой язык, позволяющий проектировать мысли и общаться с другими разработчиками.

Процесс ООП (как разработка программной системы в целом) тесно связана с подготовительным этапом анализа требований, которые зачастую включают в себя описание прецедента (USE case)

Результаты анализа требований и ООАиП необходимо представать и реализовать в контексте некоторого процесса разработки.

Наиболее важным моментом ОО Разработки является распределение обязанностей между программными объектами.

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

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

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

В процессе ООАнализа основное внимание уделяется определению и описанию объектов (или понятий) в терминах предметной области.

Например, в случае ИС «Аэропорта» среди понятий должны присутствовать: самолет, рейс, пилот.

В процессе ООПроект. Определяются программные объекты и способы их взаимодействия с целью выполнения системных требований.

Например, в системе Аэропорта программный объект самолет может содержать атрибут: бортовой номер и метод: получить историю полетов.
И наконец, на этапе реализации ООП обеспечивается реализация разработанных компонентов, таких как класс plane на языке Cu++

Инифицированный язык моделирования.

UML-обеспечивает поддержку и представляет для этих средств диаграммы.

Основные процессы разработки

Начальная фазауточнениеконструированиеприемка

Это итеративный пошаговый процесс в котором ПО не создается одним махом от начала до конца, а напротив разрабатывается и реализуется по частям. Фаза конструирование состоит из многих итераций на каждой итерации выполняется сборка, тестирование и итерация составных частей конечного продукта ,удовлетворяющего некоторому подмножеству требовании к проекту

Каждая итерация содержит все обычные все обычные фазы цикла ПО - анализ, проектирование, реализация и тестирование в начальной и определяются границы проекта ,в фазе уточнение требование выявляется более детально выполняется анализ и проектирование для настроения базовой архитектуры и создается план для конструирования

Фаза приемки может включать бета-тестирование, оптимизацию пользователя.

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

Диаграмма видов деятельности- модель бизнес - процесса или поведения системы в рамках прецедента.

Диаграмма взаимодействия- модель процесса обмена сообщениями между объектами. представляется в виде диаграмм последовательности.

Диаграмма состояний- модель динамического поведения системы и ее компонентов при переходе из одного состояния в другое

Диаграмма классов- логическая модель базовой структуры системы отражает статическую структуру систему и связи между ее элементами.

Диаграмма базы данных- модель структуры БД отражает столбы, таблицы и тп.

Диаграмма развертывания(размещения)-модель физической архитектуры системы отображает аппаратную конфигурацию ИС.

Диаграмма развертывания(размещения)

модель физической архитектуры системы отображает аппаратную конфигурацию ИС.

На рисунке показаны отношения между различными видами диаграмм UML.Указатели стрелок можно интерпретировать как отношения и является источником входных данных.

Например диаграмма прецедента является источником данных для диаграмм видов деятельности классов. Проведенная схема наглядно иллюстрирует итеративный характер разработки модели с использованием UML.

Варианты использования

Действующее лицо - это роль, которую пользователь играет по отношению к системе.

У нас 4 действующих лица:

-менеджер по продажам

-оптовый торговец

-продавец

-система учета

Говоря о действующих лицах важно видеть в них роль, а не конкретные модели, пользователи или наименование работы. Действующие лица не обязательно люди. Может быть внешней системой. Например, обновление счетов для системы учета.

Хорошим источником для определения вариантов использования служат внешние события.

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

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

Другой способ учесть изменения - это поместить нормальный процесс в рамки одного варианта использования, а все отклонения от него куда-нибудь в другое место.

Образование связи типа расширение заключается в следующем :

- зафиксируйте сначала простой, нормальный вариант использования.

- анализируйте каждый шаг в этом варианте, что здесь может идти не так, как иначе можно выполнить этот шаг.

-определите все отклонения, как расширение данного варианта использования.

Такое расщепление варианта использования можно выполнить как на стадии уточнения, так и на стадии конфигурирования.

Можно сформулировать следующие утверждения:

1) Применяйте связь расширение, когда вы оцениваете изменение в нормальном поведение подсистемы.

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

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

Диаграмма классов

Определяет типы объектов системы и различного рода статические связи.

Ассоциации/подтипы

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

Существуют 3 точки зрении на построение диаграмм классов:

1.Концептуальная (в этом случае диаграммы будут отображать понятия изучаемой предметной области, при этом может быть весьма слабое отношение к реализующим её ПО.

2. спецификация (в этом случае опускаемся на уровень ПО, но рассматриваем только интерфейс, а не реализацию).

3. Реализация (спускаемся на уровень реализации, эта точка зрения наиболее распространена однако во многих ситуациях является более предпочтительнее.

Понимание точки рассмотрения важно, как для построения, так и чтения диаграмм класса)

Ассоциации представляют собой связи между экземплярами классов(личность работает в компании, компания имеет ряд офисов)

Любая ассоциация обладает 2-мя ролями, каждая роль представляет направление ассоциации, одна от клиента к заказу, другая от заказа к клиенту.

Роль может быть наименована с помощью метки, если она отсутствует- роли присваивается имя класса цели.

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

1)Любой А всегда связан с одним В

2)Любой А связан с одним или более В

3)Любой А связан с 0 или одни В

4)Любой А всегда связан 0,1 или более В

Рассмотрение спецификации, ассоциации представляют собой ответственности класса.

Размещено на Allbest.ru

...

Подобные документы

  • Объектно-ориентированные языки моделирования. Разработка различных альтернативных подходов к анализу и проектированию. Взаимосвязь концептуальных и программных понятий. Проблемы масштабирования сложных систем. Диаграммы, описывающие поведение системы.

    лабораторная работа [159,4 K], добавлен 26.05.2014

  • Объектно-ориентированное программирование как методология программирования, опирающаяся на инкапсуляции, полиморфизме и наследовании. Общая форма класса. Наследование как процесс, посредством которого один объект получает свойства другого объекта.

    презентация [214,9 K], добавлен 26.10.2013

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

    реферат [515,6 K], добавлен 25.01.2011

  • Использование объектно-ориентированной методологии при программировании математических процессов. Среда языка программирования Delphi для решения математических задач. Объектно-ориентированные, декларативные и императивные языки программирования.

    дипломная работа [1,8 M], добавлен 14.09.2011

  • Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.

    учебное пособие [1,6 M], добавлен 28.12.2013

  • Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.

    контрольная работа [60,1 K], добавлен 17.01.2011

  • Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.

    контрольная работа [25,1 K], добавлен 14.03.2015

  • Создание программного обеспечения - системы имитационного моделирования на тему "Производственная линия с пунктами технического контроля". Описание входных и выходных данных. Объектно-ориентированное программирование. Диаграммы модулей и процессов.

    курсовая работа [1,2 M], добавлен 09.01.2014

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

    курсовая работа [859,4 K], добавлен 11.05.2015

  • Методика разработки объектно-ориентированной модели информационной подсистемы необходимой для учета успеваемости студентов факультета, которая спроектирована с помощью программного продукта Rational Rose 2003 и унифицированного языка моделирования UML.

    курсовая работа [183,9 K], добавлен 25.06.2011

  • Методология объектно-ориентированного программирования в Java. Понятия класса, объекта и объектной переменной. Динамическая и статическая объектные модели. Логическое структурирование приложения. Наследование в Java. Отличия интерфейсов от классов.

    курс лекций [547,2 K], добавлен 01.05.2014

  • Изучение принципов объектно-ориентированного программирования, в котором основными концепциями являются понятия классов и объектов. Свойства этого вида программирования: инкапсуляция, полиморфизм, наследование. Описание класса. Конструкторы и деструкторы.

    презентация [74,8 K], добавлен 14.10.2013

  • Свойства объектно-ориентированного языка программирования. Понятия инкапсуляции и наследования. Виртуальные функции и полиморфизм. Инициализация экземпляра объекта с помощью конструктора. Динамическое создание объектов. Совместимость объектных типов.

    реферат [17,0 K], добавлен 15.04.2015

  • Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.

    контрольная работа [51,7 K], добавлен 22.01.2013

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

  • Исследование особенностей объектно-ориентированной среды программирования Borland Delphi. Описание процесса создания электронного пособия для изучения студентами и применения на уроках преподавателями. Характеристика технических и программных средств.

    дипломная работа [2,3 M], добавлен 10.06.2012

  • Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.

    курсовая работа [2,6 M], добавлен 17.11.2014

  • Характеристика UML как унифицированного графического языка моделирования для описания, визуализации, проектирования и документирования объектно-ориентированных систем. Диаграмма программного обеспечения, деятельности, последовательности и реализации UML.

    курсовая работа [439,9 K], добавлен 05.06.2014

  • Основная цель технологии СОМ (объектная модель компонентов) - обеспечение возможности экспорта объектов. Объектно-ориентированное программирование и его место в программировании. Принципы и применение описаний информационных систем (UML и аналоги).

    курсовая работа [698,3 K], добавлен 09.12.2013

  • Понятие объектно-ориентированного программирования, общая характеристика языков высокого уровня. Разработка программного обеспечения для реализации компьютерной игры "пинбол" с помощью императивного программирования в среде Microsoft Visual Basic.

    курсовая работа [428,9 K], добавлен 19.09.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.