1. uml. Sinf diagrammalari


Download 66.19 Kb.
bet3/3
Sana11.11.2021
Hajmi66.19 Kb.
#173639
1   2   3
Aggregatsiya - bu yaxlitlikning uning qismlari bilan tarkibiy munosabatlarini ifodalovchi o'ziga xos birlashma turi. Assotsiatsiya turi sifatida birlashishni nomlash mumkin. Bitta yig'ish munosabati ikkitadan ortiq sinfni o'z ichiga olmaydi (konteyner va tarkib).

Yig'ish bir sinf boshqalarning to'plami yoki konteyner bo'lganida sodir bo'ladi. Bundan tashqari, sukut bo'yicha, birlashma havola bo'yicha birlashma deb ataladi, ya'ni tarkibidagi sinflarning ishlash muddati o'z ichiga olgan sinfning ishlash muddatiga bog'liq emas. Agar konteyner yo'q qilingan bo'lsa, unda uning tarkibi yo'q.

Grafik jihatdan agregatsiya "butun" sinf blokidagi bo'sh olmos va bu olmosdan "qism" sinfiga o'tuvchi chiziq bilan ifodalanadi.

8-rasm - UML-da yig'ilish

Kompozitsiya - bu yig'ishning qat'iy versiyasi. Shuningdek, qiymat bo'yicha yig'ilish deb ham ataladi.

Kompozitsiya - bu aniq belgilangan mulkchilik munosabatlari va qismlar va butun hayotning bir-biriga to'g'ri kelishi bilan birlashma shaklidir. Tarkibi konteyner sinfi misollari va mavjud bo'lgan sinf namunalarining ishlash muddatiga qattiq bog'liqdir. Agar konteyner yo'q qilinsa, unda uning tarkibidagi barcha narsalar ham yo'q qilinadi.

U yig'ish singari grafik shaklida, ammo to'ldirilgan olmos bilan ifodalanadi.

9-rasm - UML dagi kompozitsiya

Uchinchi munosabatlar - umumlashtirish - ixtisoslashtirilgan yoki merosni ifodalaydi , unda ixtisoslashtirilgan element (bola) umumlashtirilgan element (ota-ona) xususiyatlariga ko'ra quriladi. Bola ota-onaning tuzilishi va xulq-atvori bilan o'rtoqlashadi. Umumlashtirish grafik jihatdan ota-onaga ko'rsatgan bo'sh o'q bilan qattiq chiziq sifatida ifodalanadi.



10-rasm - UML da umumlashtirish

To'rtinchidan, amalga oshirish - bu sinflar o'rtasidagi semantik munosabatlar, bu erda ulardan biri ( provayder ) boshqasi ( mijoz ) rioya qilishi kerak bo'lgan kelishuvni belgilaydi . Bu interfeyslar va ushbu interfeyslarni amalga oshiradigan sinflar o'rtasidagi munosabatlar. Bu o'zaro munosabatlarning bir turi. Provayder odatda mavhum sinf bilan ifodalanadi. Grafik jihatdan amalga oshirish munosabatlari umumlashtirish va qaramlik munosabatlarining gibrididir: uchburchak etkazib beruvchini, chiziq chizig'ining boshqa uchi esa mijozni bildiradi.



11-rasm - UML-da amalga oshirish

U uchun namunaviy kod va sinf diagrammasi

Dastur harorat sensori (konsoldan kiritilgan) ma'lumotlarini oladi - TemperatureMeasure sinfining har ikkala ob'ekti uchun 5 o'lchov va ularni o'rtacha. Shuningdek, o'lchangan qiymatlarni ko'rsatish uchun ShowMeasure klassi mavjud.

#include

using namespace std;

class Sensor {

int value;

public:

Sensor() { value = 0; }

void setValue(int value) { this->value += value; }

int getValue() { return value; }

};

class MeasureCount

{

int number;

static int total;

public:

MeasureCount() { number = 0; }

void increment() { number++; total++; }

int getNumber() { return number; }

static int getTotal() { return total; }

};

int MeasureCount::total = 0;

class ITemperatureMeasure // интерфейс

{

public:

virtual void setValue() = 0;

virtual double getValue() = 0;

};

class TemperatureMeasure : public virtual ITemperatureMeasure

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

private:

Sensor* h; // агрегация

MeasureCount* measure; // композиция

public:

TemperatureMeasure(Sensor* h)

{

measure = new MeasureCount();

this->h = h;

}

void setValue()

{

int value;

measure->increment();

cout << "t[" << measure->getNumber() << "]= ";

cin >> value;

h->setValue(value);

}

double getValue() { return (double)h->getValue() / measure->getNumber(); }

int getNumber() { return measure->getNumber(); }

static int getTotal() { return MeasureCount::getTotal(); }

};
class ShowTemperature // зависимость

{

public:

static void Show(TemperatureMeasure t)

{

cout << t.getNumber() << ": ";

cout << t.getValue() << " oC" << endl;

}

};
int main()

{

Sensor* h1 = new Sensor();

TemperatureMeasure tc1(h1);

for (int i = 0; i < 5; i++)

tc1.setValue(); // требуется ввести температуру за 5 дней

ShowTemperature::Show(tc1); // вывод средней температуры

cout << endl;

Sensor* h2 = new Sensor();

TemperatureMeasure tc2(h2);

for (int i = 0; i < 5; i++)

tc2.setValue(); // требуется ввести температуру за 5 дней

ShowTemperature::Show(tc2); // вывод средней температуры

cout << endl;

cout << "Total: " << TemperatureMeasure::getTotal() << endl;

system("pause");

return 0;

}


Listing 1 - Kod namunasi

Yuqoridagi kod uchun UML sinf diagrammasi quyidagicha ko'rinadi:

12-rasm - Listing 1 ning UML diagrammasi



Sinf diagrammasida asosiy sinf TemperatureMeasure sinfidir, bu harorat o'lchagichidir. Barcha o'lchovlarning o'rtacha arifmetikasi o'lchov qiymati sifatida hosil bo'ladi - barcha o'lchovlarning yig'indisi ularning soniga bo'linadi.

Sensor sinfi (harorat sensori sifatida) o'lchovlarni qabul qilish va ularni qo'shish uchun ishlatiladi. Konsol topshirig'ida o'lchovlarning o'zi ushbu sinfga yig'indiga o'tkaziladi. Sinf asosiy TemperatureMeasure klassi bilan birlashma munosabatlariga ega: biz avval Sensor sinfining ob'ektini yaratamiz, so'ngra uni sinfning bir qismi sifatida foydalanish uchun TemperatureMeasure sinfiga parametr sifatida konstruktorga o'tkazamiz.

O'lchovlar soni MeasureCount klassi tomonidan hosil qilinadi, unda umumiy o'lchovlarni hisoblash uchun statik xususiyat jami, shuningdek ma'lum bir TemperatureMeasure ob'ekti uchun metrlar sonini hisoblash uchun hisoblash xususiyati mavjud. MeasureCount klassi TemperatureMeasure klassi bilan kompozitsiyaga bog'liq: MeasureCount ob'ekti to'g'ridan-to'g'ri TemperatureMeasure ob'ekti yaratilganda (uning konstruktorida) yaratiladi.

ITemperatureMeasure klassi TemperatureMeasure sinfining interfeysi bo'lib, uni amalga oshiruvchi provayder hisoblanadi .

Va nihoyat, ShowTemperature klassi TemperatureMeasure klassi bilan bog'liqlik munosabatlarida, chunki ShowTemperature-ning yagona Show usulini amalga oshirish TemperatureMeasure tuzilishiga bog'liq.

Adabiyotlar ro'yxati

Neiburg Erik J., Maksimchuk Robert A. Oddiy o'lim uchun UML, 2016 - 270 p.

Martin Fauler. UML. Asoslari. 3-nashr, 2019 yil - 192 p.
Download 66.19 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling