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

8-ámeliy jumıs. Programmalıq támiynattı konstrukciyalaw principleri.

Jumıstıń maqseti: SOLID (Single Responsibility, Open/Closed, Liskov

Substitution, Interface Segregation, Dependency Inversion) principlerin ámeliyatta qollanıwdı úyreniw. C++ tilinde "jaman" (principlerge qarsı) kodtı analizlep, onı SOLID boyınsha refactoring etiw. Kodtıń keńeytiwsheńligin hám ońlawǵa qolaylılıǵın arttırıw.

Teoriyalıq bólim:

SRP: Bir klass - bir wazıypa.

OCP: Keńeytiwge ashıq, ózgertiwge jabıq.

LSP: Bala klass ata-ananıń ornın basa alıwı kerek.

ISP: Úlken interfeyslerdi bóliw.

DIP: Abstrakciyaǵa ǵárezli bolıw.

ÁMELIY BÓLIM:

SOLID principleriniń buzılıwın hám dúzetiliwin kóremiz.

1-mısal: SRP (Jalǵız Juwapkershilik)

Másele: `User` klassı hám maǵlıwmat saqlaydı, hám e-mail jiberedi.

Kod (Buzılǵan):

class User {

public:

string name;

void save() { /* Bazaǵa jazıw */ }

void sendEmail(string msg) { /* Email jiberiw */ }

};

Kod (Dúzetilgen):

class User {

public:

string name;

};

class UserRepository { // Baza menen islesiw public:

void save(User u) { ... }

};

class EmailService { // Email menen islesiw public:

void sendEmail(User u, string msg) { ... }

};

2-mısal: OCP (Ashıq/Jabıq)

Másele: Jańa figura qosılsa, `AreaCalculator` ózgeredi. Kod (Buzılǵan):

double area(object shape) {

if (shape is Circle) return ...;

if (shape is Rect) return ...; // Jańa figura ushın kodtı ózgertiw kerek

}

Kod (Dúzetilgen): class Shape { public:

virtual double area() = 0;

};

class Circle : public Shape { double area() override { ... }

};

// Endi area() funkciyası ózgermeydi, tek jańa klass qosıladı.

3-mısal: LSP (Liskov)

Másele: `Penguin` (Pingvin) `Bird` (Qus) klasınan miyras aladı, biraq usha almaydı.

Kod (Buzılǵan):

class Bird { virtual void fly() {} }; class Penguin : public Bird {

void fly() override { throw "Usha almayman!"; } // LSP buzıldı

};

Kod (Dúzetilgen): class Bird {};

class FlyingBird : public Bird { virtual void fly() {} }; class NonFlyingBird : public Bird {};

class Penguin : public NonFlyingBird {}; // Ushaw metodı joq

4-mısal: ISP (Interfeysti Ajıratıw)

Másele: `Worker` interfeysi `eat()` metodına iye, biraq `Robot` awqatlanbaydı. Kod (Buzılǵan):

interface IWorker {

void work(); void eat();

};

class Robot : IWorker { void work() { ... }

void eat() { /* Bos, biraq bolıwı shárt */ }

};

Kod (Dúzetilgen):

interface IWorkable { void work(); }; interface IFeedable { void eat(); };

class Robot : IWorkable { void work() { ... } }; // Eat joq

ÁMELIY TAPSÍRMALAR

1-tapsırma: SRP (Report).

`Report` klasın (`generate()`, `print()`, `saveToFile()`) 3 klassqa bóliń: `Report`,

`Printer`, `FileSaver`.

2-tapsırma: OCP (Logger).

`Logger` klassında `log(string type)` bar. Eger type="File", faylǵa jazadı, type="Console", ekranǵa.

Bunı abstrakt `ILogger` hám onıń miyrasxorları (`FileLogger`, `ConsoleLogger`) arqalı sheshiń.

3-tapsırma: DIP (Elektr).

`Switch` (Ajıratqısh) klassı `LightBulb` (Lampochka) klasına tikkeley baylanısqan.

`Switchable` (Jaǵılıwshı) interfeysin jaratıp, `Switch` ti oǵan ǵárezli etiń. Sonda `Switch` penen `Fan` (Samallatqısh) tı da jaǵıwǵa boladı.

4-tapsırma: LSP (Tórtmúyeshlik).

`Square` (Kvadrat) klasın `Rectangle` klasınan alıw durıs pa? (Kvadratta eni hám boyı birdey bolıwı kerek, al Rectangle da hár qıylı).

Bul máseleni analizleń hám durıs ierarxiya (ekewi de `Shape`-ten alıwı kerek) dúziń.

5-tapsırma: ISP (Smart Device).

`SmartDevice` interfeysi (`print`, `fax`, `scan`) bar.

`SimplePrinter` tek `print` ete aladı.

Interfeysti bóliń (`IPrinter`, `IFax`, `IScanner`) hám klasslarǵa durıs implementaciya beriń.

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