Скачиваний:
0
Добавлен:
26.01.2026
Размер:
257.19 Кб
Скачать

4-ámeliy jumıs. Quramalılıqtı basqarıw usıllarınıń analizi.

Jumıstıń maqseti: Úlken hám quramalı programmalıq sistemalardı basqarıw usılların (Decomposition, Abstraction, Information Hiding) ámeliyatta qollanıw. "Joqarıdan-tómen" (Top-Down) hám "Tómennen-joqarı" (Bottom-Up) proektlestiriw usılların salıstırıw. Kodtıń logikalıq strukturasın jaqsılaw arqalı onıń quramalılıǵın (Complexity) azaytıw hám turaqlılıǵın arttırıw kónlikpelerin qáliplestiriw.

Teoriyalıq bólim: Quramalılıqtı basqarıw (Managing Complexity) – programmalıq injeneriyanıń baslı wazıypası.

Usıllar:

1.Dekompoziciya (Bóliw): Úlken máseleni kishi, ǵárezsiz bóleklerge (modullerge) bóliw.

2.Abstrakciya: Detallardı jasırıw. Mısalı, "Sortlaw" degende biz onıń ishki algoritmin (QuickSort, MergeSort) oylamaymız, tek nátiyjesin oylaymız.

3.Information Hiding (Maǵlıwmatlardı jasırıw): David Parnas principi. Modul basqa modullerge óziniń ishki jumısın kórsetpewi kerek (Interface vs

Implementation).

4.Top-Down: Ulıwma súwretten baslap, detallarǵa túsiw.

5.Bottom-Up: Kishi bóleklerden baslap, olardı biriktiriw.

ÁMELIY BÓLIM:

Bir máseleni – "Studentlerdi basqarıw sistemasın" (SMS) eki hár qıylı usılda (Top-Down hám Bottom-Up) proektlestirip kóremiz.

1-mısal: Top-Down (Joqarıdan-tómen) Proektlestiriw

Biz dáslep `main` funkciyasın (joqarı dáreje) jazamız, ishki funkciyalar ele joq (stub).

Kod (1-qádem: Ulıwma struktura):

int main() {

// 1. Maǵlıwmatlardı júklew loadData();

//2. Menyudı kórsetiw while (true) {

int choice = showMenu();

if (choice == 1) addStudent();

else if (choice == 2) listStudents(); else break;

}

//3. Maǵlıwmatlardı saqlaw

saveData(); return 0;

}

Kod (2-qádem: Detallastırıw - Stub funkciyalar):

void loadData() { cout << "Maǵlıwmat júklendi (Stub)" << endl; } int showMenu() {

cout << "1. Qosıw\n2. Kóriw\n3. Shıǵıw\nTańlań: "; int c; cin >> c; return c;

}

void addStudent() { cout << "Student qosıldı (Stub)" << endl; } void listStudents() { cout << "Studentler dizimi (Stub)" << endl; } void saveData() { cout << "Maǵlıwmat saqlandı (Stub)" << endl; }

Analiz: Biz programmanıń skeletin tez qurdıq. Endi hár bir funkciyanı (addStudent, listStudents) bólek-bólek toltırıp shıǵamız. Bul usıl logikanı tez túsiniwge járdem beredi.

2-mısal: Bottom-Up (Tómennen-joqarı) Proektlestiriw

Biz dáslep eń kishi bóleklerdi (Student klassı, maǵlıwmat strukturası) jazamız, keyin olardı `main` de biriktiremiz.

Kod (1-qádem: Tómengi dáreje - Klass):

class Student { public:

string name; int id;

Student(string n, int i) : name(n), id(i) {}

void print() { cout << id << ": " << name << endl; }

};

Kod (2-qádem: Orta dáreje - Baza): vector<Student> database;

void addToDB(string n, int i) { Student s(n, i);

database.push_back(s);

}

Kod (3-qádem: Joqarı dáreje - Main):

int main() {

// Kishi bloklardı testlep kóremiz addToDB("Azamat", 1); addToDB("Guli", 2);

for (auto s : database) s.print(); return 0;

}

Analiz: Biz fundamentten (klasstan) basladıq. Bul usıl isenimli, sebebi hár bir kishi blok (Student) testlengen. Biraq ulıwma sistema (menyu) eń sońında payda boladı.

3-mısal: Information Hiding (Parnas principi)

Másele: Studenttiń ID nomerin tikkeley ózgertiwden qorǵaw.

Kod (Jaman - Ashıq):

struct Student {

int id; // Hámme ózgerte aladı

};

// s.id = -5; // Qáte!

Kod (Jaqsı - Jasırın):

class Student {

private:

int id; // Jasırın

public:

void setID(int newID) {

if (newID > 0) id = newID; // Tekseriw (Logika)

else cout << "Qáte ID" << endl;

}

int getID() { return id; }

};

// s.setID(-5); // Qáte shıǵadı, id ózgermeydi.

Analiz: Biz `id` nıń qalay saqlanatuǵının (int pe, string pe) jasırıp qoydıq.

Keleshekte `id` stringke aylansa da, `main` degi kod ózgermeydi (tek `setID` ishki kodı ózgeredi).

4-mısal: Abstrakciya (Interfeys)

Másele: Maǵlıwmatlardı qay jerge saqlawdı (Faylǵa ma, Bazaǵa ma?) jasırıw.

Kod:

//Interfeys (Abstrakt klass) class IStorage {

public:

virtual void save(string data) = 0;

};

//Implementaciya 1: Fayl

class FileStorage : public IStorage { public:

void save(string data) override {

cout << "Faylǵa jazıldı: " << data << endl;

}

};

// Implementaciya 2: Baza (SQL)

class DatabaseStorage : public IStorage { public:

void save(string data) override {

cout << "SQL INSERT: " << data << endl;

}

};

void processData(IStorage* storage) { storage->save("Test Data");

}

int main() { FileStorage fs;

processData(&fs); // Faylǵa jazadı

DatabaseStorage db; processData(&db); // Bazaǵa jazadı return 0;

}

Analiz: `processData` funkciyası maǵlıwmat qayaqqa ketip atırǵanın bilmeydi (Abstrakciya). Ol tek `save` dep aytadı.

ÁMELIY TAPSÍRMALAR

1-tapsırma: Top-Down (Kalkulyator).

"Kalkulyator" programmasın Joqarıdan-Tómen usılında proektlestiriń.

1.`main`: Menyu hám ámellerdi shaqırıw.

2.Stub funkciyalar: `add()`, `sub()`, `mul()`, `div()`.

3.Keyin funkciyalardı toltırıń.

2-tapsırma: Bottom-Up (Kitapxana).

"Kitapxana" sistemasın Tómennen-Joqarı usılında proektlestiriń.

1.`Book` klassı (atı, avtorı).

2.`Library` klassı (`vector<Book>`).

3.`main`: Kitap qosıw hám kórsetiw.

3-tapsırma: Information Hiding (Tórtmúyeshlik).

`Rectangle` klasın jaratıń. `width` hám `height` ózgeriwshileri `private` bolsın. Olarǵa mánis beriwde (setter) teris san kirgizilmewin támiyinleń.

`getArea()` metodı arqalı maydandı alıń.

4-tapsırma: Dekompoziciya (Bankomat).

`withdrawMoney(int amount)` degen úlken funkciya bar. Onı 3 kishi funkciyaǵa bóliń:

1.`checkBalance()` - Balans jetkilikli me?

2.`updateBalance()` - Balanstı kemeytiw.

3.`dispenseCash()` - Aqshanı shıǵarıw. Tiykarǵı funkciya tek usılardı shaqırsın.

5-tapsırma: Abstrakciya (Logger).

`Logger` interfeysin jaratıń (`log(string msg)`).

Eki túrin jazıń: `ConsoleLogger` (ekranǵa) hám `FileLogger` (faylǵa). Polimorfizm arqalı ekewin almastırıp kóriń.

Соседние файлы в папке Programmalıq támiynat qurılması hám evolyuciyası