Практикалық жұмыс №9

Зертханалық жұмыс№9

Практикалық жұмыс №9

Объектінің қасиеті мен инкапсуляция

Объектінің қасиеті мен инкапсуляция

Инкапсуляция деп объектінің өрістеріне тек класстар әдістері арқылы қатынау үшін оларды жасыру деп түсіндіріледі.

Object Pascal-да объект өрістеріне қатынауды шектеу объект қасиеттері көмегімен жасалынады. Объект қасиеттері (property) Қасиеттің мәнін сақтайтын өріспен және қасиет өрісіне қатынауды қамтамасыз ететін екі әдіспен сипатталады. Қасиет мәнін қою әдісі қасиетті жазып алу әдісі (write) деп аталады, қасиет мәнін алу әдісі қасиетті оқу әдісі (read) деп аталады.

Классты сипаттауда қасиет аты алдында property сөзін жазады. Аттан кейін оның типінің, сосын қасиет мәніне қатынауды қамтамасыз ететін әдістер атаулары көрсетіледі. read сөзінен кейін қасиетті оқуға мүмкіндік беретін әдіс атауы, write сөзінен кейін – қасиет жазулары әдіс аты енгізіледі. Төменде Name және Address екі қасиеті бар TPerson классының сипатталуы көрсетілген:

type

TName=string[15];

TAddress=string[35];

TPerson=class

private

FName: TName;

FAddress:TAdress;

сonstructor Create (Name:TName);

procedure Show;

function GetName:TName;

function GetAddress:TAddress;

procedure SetAddress (NewAddress:TAddress);

public

property Name: TName read GetName;

property Address: TAddress read GetAddress write SetAddress;

end;

Сосын Student объектісінің Adress қасиетіне мән ьеру үшін келесі жазу орындалады:

student.Address := 'С.Петербург, ул.Садовая 21, кв.З';

Компилятор берілген мәнді беру инструкциясын әдісті шақыру инструкциясына қайтатранслирлайды:

student.SetAddress('С.Петербург, ул. Садовая 21, кв.З');

Сырттан бағдарламада қасиетті қолдану мен объект өрістерін қолданудан ажыратылмайды. Алайда олар арасыенда үлкен айырмашылық бар: Қасиет мәнін беру мен оқу кезінде бірталай жұмыысты орындайтын процедура шақырылады.

Бағдарламада қасиет әдістеріне қосымша міндеттерді жүктеуге болады. Мысалы әдіс көмегімен қасиетке берілетін мәндердің дұрыстығын тексеруге, басқалардың мәндерін беруге, қосымша процедураны шақыруға болады.

Жазып алудан қорғалған қасиет мәнін объект инициализациясы кезінде беруге болады. Төменде TPerson классының объектісін жасауды және қасиеттеріне қатынауды қамтамасыз ететін TPerson әдістері көрсетілген:

// TPerson объект конструкторы

сonstructor TPerson.Create(Name : TName);

begin

FName := Name;

end;

// Name қасиеттiнің мәнiн алу әдісі

function TPerson.GetName;

begin

Result:=FName;

end;

// қасиеттiнің мәнiн алу әдісі

function TPerson.GetAddress

begin

Result := FAddress;

end;

// Address қасиеттiнің мәнiн өзгерту әдісі

procedure TPerson.SetAddress(NewAddress : TAddress);

begin

if FAddress = ''

then FAddress := NewAddress;

end;

Объект мәліметтерін безендіру қасиеттей өрістерге қатынауды шектей алады, мысалы тек оқуға рұқсат беруге болады. Бағдарлама инструкциялары қасиет мәнін өзгерте алмау үшін қасиет сипаттамасында тек оқу әдісінің атын ғана көрсету керек. Тек оқуға арналған қасиетке мән берсе, компиляция периодының қателігіне әкеледі. Жоғарыда көрсетілген класс сипаттауында Name қасиеті тек оқуға, ал Address қасиеті – оқу және жазып алуға арналған.

TPerson классының жасалуы мен оның қасиетін орнатуды қамтамасыз ететін бағдарлама инструкциялары келесідей болуы мүмкін:

student := TPerson.Create('Иванов');

student.Address := 'ул. Садовая, д.3, кв.25';

Көру аймақтарының директивалары

Класс элементтерін (өріс, әдіс, қасиет) атаудан басқа, класс сипаттамасы өзіне класс элементінің бағдарламада көріну дәрежесін орнататын, protected (қорғалған) және private (жабық) директиваларын біріктіреді.

public секциясында аталған класс элементтері барлық класс пен модульдерге қол жетімді. Әдетте бұл секцияға бәріне ортақ класс қасиеттерінің сипаттамасын орналастырады.

protected секциясында аталған класс элементтері тек одан туған класстарды қол жетімді. Бұл секцияның класс элементтерінің көріну аумағы класс сипаттамасы болатын модульмен шектелмейді. Әдетте protected секциясына класс әдістерінің сипаттамасын енгізеді.

private секциясында аталған класс элементтері модуль ішінде көрінеді. Бұл элементтер модульдан тысқары жерде, тіпті туынды класстардың өзінде қолжетімсіз. Әдетте private секциясына класс өрістерінің сипаттамасын кіргізеді.

Төменде қатынауды басқару директивалары қосылған TPerson классының сипаттамасы көрсетілген.

TPerson = class

private

FName: TName; // Name қасиеттiнің мәнi

FAddress: TAddress; // Address қасиеттiнің мәнi

protected

Constructor Create(Name:TName);

Function GetName: TName;

Function GetAddress: TAddress;

Procedure SetAddress(NewAddress:TAddress);

Property Name: TName read GetName;

Property Address: TAddress read GetAddress write SetAddress;

end;

Кейде класс элементтерін толығымен жасыру керек болады. Бұл жағдайда, класстың анықтамасын жеке модульге, ал оған сілтемені осы класс объектілерін қолданатын бағдарламаға орнату керек.

Мұрагерлік

Объектілі-бағытталған Бағдарламалаудың концепциясы бар классқа жаңа өрістер, қасиеттер мен әдістерді қосу арқылы жаңа класстарды анықтау мүмкіндігін болжайды. О Сонда жаңа туындаған класс өзінің негізгі, түпкі классының қасиеттері мен әдістерін мұрагерлікке алады.

Ұрпақклассты жариялауда түпкі класс көрсетіледі. Мысалы, TEmployee (қызметші) классы жоғарыда тұрған TPerson классынан Department (бөлім) өрісін қосу арқылы туындауы мүмкін. Temployeeға хабарландыру келесідей болады:

TEmployee = class(TPerson)

FDepartment : integer; // бөлім номері

constructor Create(Name : TName; Dep : integer);

end;

Жақшаға кіргізілген TPerson классының (негізгі) аты TEmployee классының одан туындағанын көрсететеді.

TEmployee классының өзінің жеке конструкторы бар, ол негізгі класстың өз өрістерінен инициализациясын қамтамасыз етеді. Төменде конструкторды іске асырудың үлгісі:

constructor TEmployee.Create(Name : TName; Dep : integer);

begin

inherited Create(Name);

FDepartment := Dep;

end;

Берілген мысалда inherited директивасымен түпкі класстың конструкторы шақырылады, сосын ұопақ класс өрісіне атау беріледі. Өндірістік класс жасағаннан кейін бағдарламада негізгі класстың өрістері мен әдістерін қолдануға болады.

Онымен қоса, класс әдісінің ішінде әдісі аталынатын объектіге сілтеме болатын self кілттік сөзін қолдануға болады.

Өндірістік класстың объектісін жасағаннан кейін бағдарламада түпкі класстың әдістері мен өрістерін қолдануға болады. Төменде осы мүмкіндікті көрсететін бағдарлама фрагментісі берілген.

engineer := TEmployee.Create('Сидоров',413);

engineer.address := 'ул.Блохина, д.8, кв.10';

Бірінші инструкция TEmployee типті объект жасаса, екіншісі— түпкі классқа қатысты қасиетті белгілейді.

Полиморфизм және виртуалды әдістер

Полиморфизм концепциясы объект классына сәйкес келетін әдісті қолдануды қамтамасыз етеді. Үш класс анықталаған делік, біреуі қалған екеуі үшін негізгі болып табылады.

type
// негізгі класс TPerson

TPerson = class

FТame : string; { аты}

constructor Create(name : string) ;

function info: string; virtual;

end;

// негізі туындысында TPerson

TStud = class(TPerson)

FGr : integer; { топ номері }

constructor Create (name : string; gr: integer);

function info: string; override

end;

// негізі туындысында TPerson

TProf = class(TPerson)

FDep : string; { кафедра атыы }

constructor Create(name : string; dep : string);

function info: string; override;

end;

Бұл класстардың әрқайсысында info әдісі анықталған. virtual директивасының көмегімен info әдісі виртуалды болып жарияланған. Әдістің виртуалды болып аталуы туынды классқа оны өзінің әдісімен алмастыруға мүмкіндік береді (ол override директивасымен белгіленеді). Төменде әр класс үшін info әдісін анықтау көрсетілген:

function TPerson.info : string;

begin

result := '';

end;

function TStud.info : string;

begin

result := FName + ' гр.' + IntTostr(FGr);

end;

function TProf.info : string;

begin

result := fname + ' каф.' + FDep;

end;

Адамдардың тiзiмiн программада класстың объекттер массивімен көрсетуге болады TPerson

list : array[l..100] of TPerson;

Object Pascalдың Delphi тілі түпкі класстың нұсқағышына туынды класс нұсқағышынығ мәнін меншіктеп алуға мүмкіндік беретіндіктен, тізімді осылайша жария етуге болады. Сондықтан TStud және TProf класстарының объектілері list массивінің элемнттері бола алады.

Жабылған әдісте түпкі әдісті inherited директивасын қолданып шақыруға болады.

Екі аласс та бір түпкі класстан туындағандықтан, студенттер мен оқытушылардың тізімін келесідей жариялауға болады (мұнда объект — бұл нұсқағыш екенін еске түсіру қажет):

list: array[l..SZL] of TPerson;

Студенттер мен оқытушылардың тізімін info әдісін массив элементтеріне қолдану арқылы шығаруға болады:

st := '';

for i:=l to SZL do // SZL - размер массива-списка

if list[i] <> NIL then st := st + list[i].Info+ #13;

ShowMessage (st);

Бағдаоламаның жұмыс істеуі барысында массвтің әр элементі xstud және TProf типтерінің объектілерінен тұруы мүмкін.

Абстрактілі және артық жүктелген әдістер

Виртуалды әдістер сонымен қатар абстрактілі болуы мүмкін, бұл берілген класста әдістің жүзеге асырылуы мүмкін еместігін көрсетеді. Ол әдіс туынды класстарда іскеасырылкы тиіс. Абстрактілі әдісті сипаттау үшін virtual сөзінен кейін тұратын, abstract сөзі қолданылады.

Әдістер артық жүктелуі мүмкін – яғни бір атпен бірнеше әдістерді анықтауға болады (кілттік сөз соңында overload сөзін қосу арқылы):

function Min(A,B: Double): Double; overload;

function Min(A,B: Integer): Integer; overload;

Бұл хабарландыру түрлі параментрлерді қабылдайтын екі Min функциясы бар деп есептеу нәтижесініңтейді. Қажет функцияны таңдау, берілген параметрлерге байланысты, компилятормен жасалынады.

Delphi Класстары мен объектілері

Интерфейсті іске асыру үшін Delphi форманың түрлі компоненттерімен (командалық батырмалар, түзету өрістері) жұмыс істейтін класстар кітапханасын қолданады.

Қосымшаның формасын жобалау кезінде Delphi бағдарламаның мәтініне қажетті объектілерді автоматты қосады. Егер Delphi іске қосылғаннан кейін, бірден код редакторының терезесіне қарасақ, келесі жолдарды көреміз:

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: Tform1

Бұл бастапқы класстың, қосымшаның бос формасының cипаттамасы және объектіні жариялау.

Программист қажетті компоненттерді қосып, форманы жасағанда, Delphi форма классының сипаттамасын құрастырады. Программист форма оқиғасын өңдеу функциясын немес оның компонентін жасағанда, Delphi қосымшаның формасының класс сипаттамасына әдістің жариялануын қосады.

Класстар кітапханасына визуалды компоненттер класстарынан басқа, сәйкесті объектілердің жасалуы мен олардың әдістеріне қатынауды қамтамасыз ететін визуалды емес (көрінбейтін) компоненттер класстары кіреді. Мұндай визуалды емес компоненттің мысалы ретінде таймерді (TTimer типі) және мәліметтер базасына қатынау мен басқару компоненттерін айтуға болады. Одан басқа көптеген класстар болады, алайды олардың қарастырылуы бұл жұмыстың міндетіне кірмейді.

Тапсырманы орындау үлгісі

Пәндік сала: «Ұшқыш аппараттар»

5.1 - сурет – Тапсырманың орындалу үлгісі

Object Pascalда консрльдық қосымшаны жасау үлгісі:

program Lab3op;

{$APPTYPE CONSOLE}

uses

SysUtils;

//

// Ұшқыш аппараттар (ЛА)

//

const

STORM = 7; // Қатты жел рұқсат етілмейді

MIN_HEIGHT = 500; // Бастапқы минималды ұзындығы

MIN_FUEL = 100; // Жанармайдың минималды өлшемі

type

// Кездесетін күйлерді беретін тапсырма тізімі

// Ұшқыш аппарат - "жерде" и "аспанда"

FlyingState = (onGround, inAir);

// Кездесетін күйлерді беретін тапсырма тізімі

// Қозғаушы - "тоқтатылды", "қосылды"

EngineState = (started, stopped);

//

// Класс: Ұшқыш аппарат (не ЛА)

//

FlyingMachine = class

private

name : string;

protected

state : FlyingState;

public

constructor Create; overload;

constructor Create(n: string); overload;

destructor Destroy; override;

// name жабық айнымалысына кіруге рұқсат ететін екі әдіс

procedure setName(n : string); virtual;

function getName : string; virtual;

procedure fly; virtual;

end;

//

// Класс: моторсыз ЛА планеры.

// Планер нақтылы биiктiкке басқа ұшақпен көтерiледi

// бұдан әрi өспелi әуа ағындарында булайды

//

Glider = class(FlyingMachine)

protected

windForce : integer;

startHeight : integer;

public

constructor Create(n : string);

procedure setWindForce(wf : integer); virtual;

function getWindForce : integer; virtual;

function getHeight() : integer; virtual;

procedure setHeight(h : integer); virtual;

procedure fly; override;

end;

//

// Класс: моторлы ЛА ұшағы.

//

Airplane = class(FlyingMachine)

protected

fuel : integer;

engine : EngineState;

public

constructor Create(n: string);

destructor Destroy; override;

procedure fly; override;

procedure addFuel(f : integer); virtual;

procedure ground(); virtual;

end;

//

// Класс операцияларын іске қосу

//

constructor FlyingMachine.Create;

begin

// Басқа құраушыны шақырамыз

Create('UFO');

end;

constructor FlyingMachine.Create(n: string);

begin

setName(n);

state := onGround;

WriteLn('FlyingMachine.Create ', name);

end;

destructor FlyingMachine.Destroy;

begin

WriteLn('FlyingMachine.Destroy ', name);

end;

procedure FlyingMachine.setName(n : string);

begin

name := n;

end;

function FlyingMachine.getName : string;

begin

getName := name;

end;

procedure FlyingMachine.fly;

begin

state := inAir;

WriteLn('FlyingMachine.fly ', name, ' Flying!');

end;

constructor Glider.Create(n : string);

begin

inherited Create(n);

windForce := 0;

startHeight := 0;

WriteLn('Glider.Create ', name);

end;

procedure Glider.fly;

begin

if (windForce < STORM) and (startHeight >= MIN_HEIGHT) then begin

WriteLn('Glider.fly ', name,

' Wind=', windForce, ' Height=', startHeight);

inherited fly;

end

else

WriteLn('Glider.fly ', name, ' Wind is too strong!');

end;

procedure Glider.setWindForce(wf : integer);

begin

windForce := wf;

end;

function Glider.getWindForce : integer;

begin

getWindForce := windForce;

end;

procedure Glider.setHeight(h : integer);

begin

startHeight := h;

end;

function Glider.getHeight : integer;

begin

getHeight := startHeight;

end;

constructor Airplane.Create(n: string);

begin

inherited Create(n);

engine := stopped;

fuel := 100;

WriteLn('Airplane.Create ', name);

end;

destructor Airplane.Destroy;

begin

WriteLn('Airplane.Destroy ', name);

if state = inAir then

ground;

if engine = started then begin

WriteLn('Airplane.Airplane ', name, ' Stop engine!');

engine := stopped;

end;

inherited Destroy;

end;

procedure Airplane.addFuel(f : integer);

begin

fuel := fuel + f;

WriteLn('Airplane.addFuel ', name, ' Fuel=', fuel);

end;

procedure Airplane.fly;

begin

if fuel > MIN_FUEL then begin

if engine = stopped then begin

engine := started;

WriteLn('Airplane.fly ', name, ' Start engine!');

end;

WriteLn('Airplane.fly ', name, ' Fuel=', fuel);

inherited fly;

fuel := fuel - 50;

end

else

WriteLn('Airplane.fly ', name, ' Not enough fuel!');

end;

procedure Airplane.ground();

begin

state := onGround;

WriteLn('Airplane.ground ', name, ' on the ground!');

end;

var

glide : Glider;

plane : Airplane;

a, b : FlyingMachine;

begin

WriteLn('************ Test Glider class ************');

WriteLn;

glide := Glider.Create('Scooter-FX12');

glide.setHeight(MIN_HEIGHT + 100);

glide.fly;

glide.Destroy;

ReadLn;

WriteLn('************ Test Airplane class ************');

WriteLn;

plane := Airplane.Create('TY-134');

plane.fly;

plane.addFuel(MIN_FUEL + 300);

plane.fly;

plane.fly;

plane.fly;

plane.ground;

plane.Destroy;

ReadLn;

WriteLn('************ Test classes ************');

a := Glider.Create('Glider-AQ23');

b := Airplane.Create('LA-46');

a.fly;

b.fly;

WriteLn('FlyingMachine name a=', a.getName);

WriteLn('FlyingMachine name b=', b.getName);

a.Destroy;

b.Destroy;

ReadLn;

end.

Бағдарламаның орындалу нәтижесі:

*** Тест класса Glider ***

FlyDevice::FlyDevice Scooter-FX12

Glider::Glider Scooter-FX12

Glider::fly Scooter-FX12 Высота=600 Сила Ветра=0

FlyDevice::fly Scooter-FX12 аспанда!

FlyDevice::~FlyDevice Scooter-FX12

*** Airplane класының тестісі ***

FlyDevice::FlyDevice TY-134

Airplane::Airplane TY-134

Airplane::fly TY-134 Жанармай жетіспейді!

Airplane::addFuel TY-134 Жанармай =400

Airplane::fly TY-134 Қозғаушыны қосу

Airplane::fly TY-134 Жанармай =400

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай =350

FlyDevice::fly TY-134 аспанда!

Airplane::fly TY-134 Жанармай=300

FlyDevice::fly TY-134 аспанда!

Airplane::ground TY-134 Қонады

Airplane::~Airplane TY-134 Қозғаушыны тқтату

FlyDevice::~FlyDevice TY-134

*** Класстардың полиморфизм тестісі ***

FlyDevice::FlyDevice Glider-AQ23

Glider::Glider Glider-AQ23

FlyDevice::FlyDevice LA-46

Airplane::Airplane LA-46

Glider::fly Glider-AQ23 Ұшуға қолайсыз жағдай

Airplane::fly LA-46 Жанармай жетіспейді!

Имя объекта a = Glider-AQ23

Имя объекта b = LA-46

FlyDevice::~FlyDevice Glider-AQ23

Airplane::~Airplane LA-46

FlyDevice::~FlyDevice LA-46

Бағдарламаның орындалу нәтижесі:

************ Test Glider class ************

FlyingMachine.Create Scooter-FX12

Glider.Create Scooter-FX12

Glider.fly Scooter-FX12 Wind=0 Height=600

FlyingMachine.fly Scooter-FX12 Flying!

FlyingMachine.Destroy Scooter-FX12

************ Test Airplane class ************

FlyingMachine.Create TY-134

Airplane.Create TY-134

Airplane.fly TY-134 Not enough fuel!

Airplane.addFuel TY-134 Fuel=500

Airplane.fly TY-134 Start engine!

Airplane.fly TY-134 Fuel=500

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=450

FlyingMachine.fly TY-134 Flying!

Airplane.fly TY-134 Fuel=400

FlyingMachine.fly TY-134 Flying!

Airplane.ground TY-134 on the ground!

Airplane.Destroy TY-134

Airplane.Airplane TY-134 Stop engine!

FlyingMachine.Destroy TY-134

************ Test classes ************

FlyingMachine.Create Glider-AQ23

Glider.Create Glider-AQ23

FlyingMachine.Create LA-46

Airplane.Create LA-46

Glider.fly Glider-AQ23 Wind is too strong!

Airplane.fly LA-46 Not enough fuel!

FlyingMachine name a=Glider-AQ23

FlyingMachine name b=LA-46

FlyingMachine.Destroy Glider-AQ23

Airplane.Destroy LA-46

FlyingMachine.Destroy LA-46

Сабаққа дайындалуға арналған әдістемелік нұсқаулар

Әдебиеттер:

1 Покушалова, Л.В. Метод case - study как современная технология профессионально-ориентированного обучения студентов [Текст] / Л.В. Покушалова // Молодой ученый. —2011. —No5. Т.2. —С. 155-157.

2 Романов П.В. Стратегия кейс-стади в исследовании социальныхслужб//Социс,2005, No4, с 101-109.6.

3 Фливберг, Б. Кейс-стади в контексте качественно-количественнойпроблематики: Ст. из Дании] / Б. Фливберг // Социологические исследования. -2004. -No 9. -С. 15 –

4 Гагарина, Л.Г. Разработка и эксплуатация автоматизированных систем: учеб. пособие/ Л.Г. Гагарина, Д.В. Киселев, Е.Л. Федотова; ред. Л.Г. Гагарина. - М.: Форум: ИНФРА-М, 2011. - 384с. 2. Пирогов, В.Ю. Информационные системы и базы данных: организация и проектирование: учеб. пособие для вузов/ В.Ю. Пирогов. - СПб. : БХВ-Петербург, 2009. - 528 с. 3.

5 Фуфаев, Д.Э. Разработка и эксплуатация автоматизированных информационных систем : учеб. Для студ. сред. проф. образования/ Д.Э. Фуфаев, Э.В. Фуфаев. - М.: Академия, 2010. - 304 с.б)

6 Федорова, Г.Н. Информационные системы : учебник/ Г.Н. Федорова. - 2-еизд., испр. - М.: Академия, 2011. - 208 с.

Қосымша:

7 Ларман К. Применение UML и шаблонов проектирования. 2-е издание.: Пер. с англ. – М.: Издательский дом “Вильямс”, 2002. – 624 с.: ил.

8 Калянов Г.Н. CASE-технологии: Консалтинг в автоматизации бизнес-процессов. 2-е изд. перераб. и доп. - М.-Горячая линия – Телеком, 2000.-320 с.

9 Вендров А.М. Проектирование программного обеспечения экономических информационных систем. Учебник. М.: Финансы и статистика, 2000.

10 Александров, Д.В. Инструментальные средства информационного менеджмента. CASE-технологии и распределенные информационные системы : учебное пособие / .В.Александров. -М. : Финансы и статистика, 2011. -225 с. -ISBN 978-5-279-03475-8;

11 http://www.bookwebmaster.narod.ru/uml.html

12 http://wm-help.net/books-online/book/57663/57663-53.html

Зертханалық жұмыс №9

Пакеттерге компоненттер қосу және тәуелділіктерді бейнелеу

Жұмыс мақсаты:

1. Міндеттер қою.

Өз бетінше дайындалуға арналған тапсырма:

1. Браузерде компоненттер көрсетімінде тышқанның оң батырмасымен шертіңіз;

2. Ашылған менюде New>Package (Жасау > Пакет) пунктін таңдаңыз;

3. Entities (Маңыздар) пакетін атаңыз;

4. Бірден үшке дейін қадамдарды қайталап, Boundaries (Шекаралар) және Control (Басқару) пакеттер жасаңыз.

Жұмыс мазмұны:

1.Басты Компоненттер диаграммасын (Main) тышқанмен екі рет шертіп, ашыңыз;

2.Entities, Boundary және Control пакеттерін браузерден Басты диаграммаға тасып әкелеңіз.

Есеп мазмұны:

1. Инструменттер панелінің Dependency (Тәуелділік) батырмасын басыңыз;

2. Басты Компоненттер диаграммасының Boundaries пакетінде тышқанмен шертіңіз;

3. Control пакетіне тәуелсіздік сызығын жүргізіңіз;

4. 1 — 3 қадамдарын қайталап, Control пакетінен Entities пакетіне тәуелсіздік сызығын жүргізіңіз.

Әдістемелік нұсқаулар

Модельдің физикалық көрсетімі

Бұрын қарастырылған барлық диаграммалар жүйе моделін салудың концептуалды аспектілерін бейнеледі және көрсетімнің логикалық деңгейіне жатты. Логикалық көрсетім ерекшелігі, өз бетіндік материалдық іске асырмайтын ұғымдармен операция жасаумен шектеледі. Басқаша айтқанда, кластар, ассоциациялар, күйлер, хабарламалар сияқты логикалық көрсетімнің түрлі элементтері материалдық немесе физикалық әрекет етпейді. Олар тек біздің физикалық жүйе құрылымын немесе оның тәртіп аспектілерін түсінуімізді бейнелейді.

Логикалық көрсетімнің негізгі белгіленуі жүйе моделінің элементтері арасында құрылымдық және функционалдық қатынастарды талдаудан тұрады. Алайда нақты физикалық жүйені жасау үшін біршама түрде логикалық көрсетімнің барлық элементтерін нақты материалдық маңыздарға жүзеге асыру қажет. Осындай нақты маңыздарды сипаттау үшін модельдік көрсетімнің басқа аспектісі, атап айтқанда, модельдің физикалық көрсетімі белгіленген.

UML тілінде жүйелер модельдерінің физикалық көрсетімі үшін жүзеге асыру диаграммалары пайдаланылады, оларға екі жеке канондық диаграмма енеді: компоненттер диаграммасы және өрбіту диаграммасы.

№7 жаттығу. Компоненттер диаграммасын салу

Осы жаттығуда тапсырыстарды өңдеу жүйесінің Компоненттер диаграммасы құрылады. Осы моментте "Жаңа тапсырыс енгізу" пайдалану нұсқасы үшін талап етілетін барлық кластар анықталған. Басқа пайдалану нұсқаларын жүзеге асыру шамасына қарай диаграммаға жаңа компоненттер енгізген жөн.

Міндеттер қою

Жүйені талдау және жобалау аяқталғаннан кейін жоба әзірлеуші Компоненттер диаграммасын құрды. Бағдарламалау тілі ретінде C++ таңдап, әзірлеуші әр класс үшін осы тілге сәйкес компоненттер жасады.

7.1-суретте жүйенің басты Компоненттер диаграммасы көрсетілген. Онда жасалатын компоненттер пакетіне назар аударылады.

7.2-суретте Entities пакетінің барлық компоненттері бейнеленген. Оларда жүйенің Логикалық көрсетімінің Entities пакетінің кластары болады.

7.1-сурет - Жүйесінің басты Компоненттер диаграммасы

7.2-сурет - Entities пакетінің Компоненттер диаграммасы

7.3-суретте Control пакетінің компоненттері көрсетілген. Оларда жүйенің Логикалық көрсетімінің Control пакетінің кластары болады.

7.3-сурет - Control пакетінің Компоненттер диаграммасы

Соңында 7.4-суретте Boundaries пакетінің компоненттері көрсетілген. Олар да жүйенің Логикалық көрсетімінің аттас пакетінің кластарына сәйкес келеді.

7.4-сурет - Boundaries пакетінің Компоненттер диаграммасы.

7.5-суретте жүйенің барлық компоненттері көрсетілген. Осы диаграммада жобаланатын жүйенің барлық компоненттері арасында барлық тәуелділіктерді көруге болады.

7.5-сурет – Жүйенің компоненттер диаграммасы

Пакеттерге компоненттер қосу және тәуелділіктерді бейнелеу

Басты Компоненттер диаграммасының Entities пакетінде тышқанмен екі рет шертіп, осы пакеттің басты Компоненттер диаграммасын ашыңыз;

1.Инструменттер панелінің Package Specification (Пакет спецификациясы) батырмасын басыңыз;

2.Пакет спецификациясын диаграммаға орналастырыңыз;

3.Пакет спецификациясы атауын енгізіңіз — Orderltem;

4.2 — 4 қадамдарын қайталап, Order пакетінің спецификациясын қосыңыз;

5.Инструменттер панелінің Package Body (Пакет бойы) батырмасын басыңыз;

6.Оны диаграммаға орналастырыңыз;

7.Пакет бойының атауын енгізіңіз — Orderltem;

8.6 — 8 қадамдарын қайталап, Order пакетінің бойын қосыңыз;

10.Инструменттер панелінің Dependency (Тәуелділік) батырмасын басыңыз;

11.Тышқанмен Orderltem пакет бойын шертіңіз;

12.Orderltem пакет спецификациясына тәуелділік сызығын жүргізіңіз;

13.10 — 12 қадамдарын қайталап, Order пакет бойы мен Order пакет спецификациясы арасында тәуелділік сызығын қосыңыз;

14.10 — 12 қадамдарын қайталап, Order пакет спецификациясынан Orderltem пакет спецификациясына тәуелділік сызығын қосыңыз;

Сипатталған әдістің көмегімен келесі компоненттер мен тәуелділікті жасаңыз:

• OrderOptions пакетінің спецификациясы;

• OrderOptions пакетінің бойы;

• OrderDetail пакетінің спецификациясы;

• OrderDetail пакетінің бойы Boundaries пакетіне.

Тәуелділік:

• OrderOptions пакет бойынан OrderOptions пакет спецификациясына;

• OrderDetail пакет бойынан OrderDetail пакет спецификациясына;

• OrderOptions пакет спецификациясынан OrderDetail пакет спецификациясына.

Control пакеті үшін:

• OrderMgr пакетінің спецификациясы;

• OrderMgr пакетінің бойы;

• TransactionMgr пакетінің спецификациясы;

• TransactionMgr пакетінің бойы.

Control пакетіне Тәуелділік:

• OrderMgr пакет бойынан OrderMgr пакет спецификациясына;

• TransactionMgr пакет бойынан TransactionMgr пакет спецификациясына;

• OrderMgr пакет спецификациясынан TransactionMgr пакет спецификациясына.

Жүйенің Компоненттер диаграммасын жасау

1. Браузерде Компоненттер көрсетімінде тышқанның оң батырмасымен шертіңіз;

2. Ашылған менюде New> Component Diagram (Жасау> Компоненттер диаграммасы ) пунктін таңдаңыз;

3. System жаңа диаграмманы атаңыз;

4. Осы диаграмманы тышқанмен екі рет шертіңіз.

Жүйенің Компоненттер диаграммасына компоненттерді орналастыру

1. Браузерде Entities компоненттер пакетін ашу үшін оны бұрыңыз;

2. Entities компонент пакетінде Order пакет спецификациясын тышқанмен шертіңіз;

3. Осы спецификацияны диаграммаға тартып әкеліңіз;

4. 2 және 3 қадамдарын қайталап, диаграммаға Orderlter пакетінің спецификациясын орналастырыңыз;

• Осы әдістің көмегімен диаграммаға келесі компоненттерді орналастырыңыз: Boundaries: компоненттер пакетінен

• OrderOptions пакетінің спецификациясы;

• OrderDetail пакетінің спецификациясы.

Control компоненттер пакетінен:

• OrderMgr пакетінің спецификациясы;

• TransactionMgr пакетінің спецификациясы.

Инструменттер панелінің Task Specification (Міндеттер спецификациясы) батырмасын басыңыз.

Диаграммаға міндеттер спецификациясын орналастырыңыз және оны OrderClientExe атаңыз.

OrderServerExe міндеттер спецификациясы үшін 6 және 7 қадамдарын қайталаңыз.

Қалған тәуелділіктерді жүйенің Компоненттер диаграммасына қосу

Бұрыннан келе жатқан тәуелділіктер жүйенің Компоненттер диаграммасында оған сәйкес компоненттерді қосқаннан кейін автоматты түрде көрсетіледі. Енді қалған тәуелділіктерді қосу керек.

1. Инструменттер панелінің Dependency (Тәуелділік) батырмасын басыңыз. 2. OrderDetail пакеті спецификациясын тышқанмен шертіңіз.

3. OrderMgr пакет спецификациясына тәуелділік сызығын жүргізіңіз.

4. 1 — 3 қадамдарын қайталап, келесі тәуелділікті жасаңыз:

• OrderMgr пакет спецификациясынан Order пакет спецификациясына;

• TransactionMgr пакет спецификациясынан Orderltem пакет спецификациясына;

• TransactionMgr пакет спецификациясынан Order пакет спецификациясына;

• OrderClientExe есеп спецификациясынан OrderOptions пакет спецификациясына;

• OrderServerExe есеп спецификациясынан OrderMgr пакет спецификациясына.

Кластарды компонентмен қатынастыру

1.Браузердің логикалық көрсетімінде Entities пакетінің Order класын табыңыз.

2.Осы класты браузер Компоненттерінің көрсетімінде Order компоненті пакетінің спецификациясына тартып әкеліңіз. Нәтижесінде Order класы Order компонентінің пакет спецификациясымен.

3.Браузер Компоненттерінің көрсетімінде Order класын Order компоненті пакетінің бойына тасымалдаңыз. Нәтижесінде Order класы Order компонентінің пакет бойымен қатынастырылады.

4.1 — 3 қадамдарын қайталап, кластарды келесі компоненттермен қатынастырыңыз:

• Orderltem класы Orderltem пакет спецификациясымен;

• Orderltem класы Orderltem пакет бойымен;

• OrderOptions класы OrdorOptions пакет спецификациясымен;

• OrderOptions класы OrderOptions пакет бойымен;

• OrderDetail класы OrderDetail пакет спецификациясымен;

• OrderDetail класы OrderDetail пакет бойымен;

• OrderMgr класы OrderMgr пакет спецификациясымен;

• OrderMgr класы OrderMgr пакет бойымен;

• TransactionMgr класы TransactionMgr пакет спецификациясымен;

• TransactionMgr класы TransactionMgr" пакет бойымен.