Скачиваний:
2
Добавлен:
23.04.2025
Размер:
420.19 Кб
Скачать

14-ámeliy sabaq: Programma kodın qayta kórip shıǵıw hám qayta islew.

Jumıstıń maqseti: Studentlerdiń tómendegi mashqalalardı úyreniwi:

Programma kodın qayta qaraw hám tallaw processin túsiniw

Kod sapasın jaqsılaw usılların meńgeriw

Refaktoring texnologiyaların ámeliyatta qollana alıw

Programmalıq támiynattıń ańsat túsinikli hám qollanıwshıǵa qolayı bolıwın támiyinlew

Teoriyalıq bólim: Programma kodın qayta kórip shıǵıw hám qayta islew (refaktoring) - bul programmanıń ishki strukturasın ózgertpesten, onıń sırtqı háreketin saqlap qalıp kodtıń sapasın jaqsılaw procesi. Bul process tómendegishe maqsetlerdi gózleydi:

Kodtıń oqıw qolaylılıǵın arttırıw

Programmanıń qurılma strukturasın jetilistiriw

Qosımsha funkcionallıqlardı jeńil qosıw imkaniyatın jaratıw

Programmanıń ónimdarlıǵın jaqsılaw

Ámeliy bólim:

Kodtı tallaw hám analiz qılıw

Kodtıń aǵımdaǵı strukturasın diqqat penen kórip shıǵıń

Qaytalanatuǵın uchastkalardı anıqlań

Jumıs islew principlerin túsinip alıń

Potencial problemalı uchastkalardı belgilep alıń

Refaktoring strategiyasın tanlaw

Tómendegi refaktoring usılların qollanıń:

Funkciyalardı bóliw

Qaytalanatuǵın kodlardı abstrakciyalaw

Klasslar hám metodlardı optimizaciyalaw

Qosımsha abstrakciya qatlamların kirgiziw

Kod strukturasın jetilistiriw mısalları

Mısal retinde Python tilinde jazılǵan kodtı qaraymız:

Derek kodı

def esapla(a, b, c): if a > 0:

if b > 0:

if c > 0:

return a + b + c else:

return a + b

else:

return a

return 0

Refaktoring qılınǵan kod

def esapla_optimizaciya(*argumentler):

"""Oń sanlardıń summasın esaplaydı"""

return sum(x for x in argumentler if x > 0)

Qatelikliklerdi boldırmaw ushın hár adımda kodtı testlep turıń, ózgerislerdi kishkene bóleklerde ámelge asırıń, versiya kontrol sistemaların qollanıń (mısalı, Git) hám ádettegi testlerdi ótkeriń. Al dokumentaciya hám túsindiriw ushın: ózgertilgen kodqa túsindirme jazıp qoyıń, funkcionallıqtıń ózgermegenin tastıyıqlań hám ózgerisler haqqında qısqasha esabat dúziń

Programma kodın qayta kórip shıǵıw hám qayta islew mısalı (C++)

Derek kodı (Unamsız jazılǵan kod):

#include <iostream> #include <vector>

void print_info(std::vector<int> numbers) { int sum = 0;

int max = numbers[0]; int min = numbers[0];

for (int i = 0; i < numbers.size(); i++) { sum = sum + numbers[i];

if (numbers[i] > max) { max = numbers[i];

}

if (numbers[i] < min) { min = numbers[i];

}

}

std::cout << "Summa: " << sum << std::endl; std::cout << "Maksimum: " << max << std::endl; std::cout << "Minimum: " << min << std::endl;

}

int main() {

std::vector<int> numbers = {5, 2, 9, 1, 7}; print_info(numbers);

return 0;

}

Refaktoring qılınǵan kod:

#include <iostream> #include <vector> #include <algorithm> #include <numeric>

class NumberAnalyzer { private:

std::vector<int> numbers;

public:

NumberAnalyzer(const std::vector<int>& input_numbers) : numbers(input_numbers) {}

int calculateSum() const {

return std::accumulate(numbers.begin(), numbers.end(),

0);

}

int findMaximum() const {

return *std::max_element(numbers.begin(), numbers.end());

}

int findMinimum() const {

return *std::min_element(numbers.begin(), numbers.end());

}

void printStatistics() const {

std::cout << "Summa: " << calculateSum() << std::endl; std::cout << "Maksimum: " << findMaximum() << std::endl; std::cout << "Minimum: " << findMinimum() << std::endl;

}

};

int main() {

std::vector<int> numbers = {5, 2, 9, 1, 7}; NumberAnalyzer analyzer(numbers); analyzer.printStatistics();

return 0;

}

Refaktoringtiń artıqmashlıqları:

1.Kod anıǵıraq hám túsinikli boladı

2.Hár metodtıń jeke juwapkershiligi bar

3.C++ standart algoritmleri qollanıldı

4.Kod qayta qollanıla alatuǵın boldı

5.Testlew ápiwayılastı

Negizgi ózgerisler:

Bir funkciya ornına klass dúzildi

Hár bir esaplaw ámeliyatı jeke metod bolıp bólindi

Standart algoritmler qollanıldı

Kod strukturası jaqsılandı

Refaktoring Mısalı: paydalanıwshı maǵlıwmatların qayta islew

Dáslepki Python funkciyası:

def user_data_process(data): result = []

for i in range(len(data)): if data[i]['age'] > 18:

result.append(data[i]['name']) return result

C++ Refaktoring úlgileri:

1. Standard Library qollanǵan úlgi:

#include <iostream> #include <vector> #include <string> #include <algorithm>

struct User { std::string name; int age;

};

std::vector<std::string> userDataProcess(const std::vector<User>& data) {

std::vector<std::string> result;

// Algoritmdi qollanıp qayta islew std::copy_if(data.begin(), data.end(),

std::back_inserter(result), [](const User& user) {

return user.age > 18;

},

[](const User& user) { return user.name;

}

);

return result;

}

int main() {

std::vector<User> users = { {"Áliy", 20}, {"Lepes", 16}, {"Gúlnara", 25}, {"Bekzat", 17}

};

auto adultNames = userDataProcess(users);

// Nátiyjelerdi shıǵarıw

for (const auto& name : adultNames) { std::cout << name << std::endl;

}

return 0;

}

2. Lambda hám transform qollanǵan nusqa:

#include <iostream> #include <vector> #include <string> #include <algorithm>

struct User { std::string name; int age;

};

std::vector<std::string> userDataProcess(const std::vector<User>& data) {

std::vector<std::string> result;

// Lambda funkciyaları menen qayta islew std::transform(data.begin(), data.end(),

std::back_inserter(result),

[](const User& user) -> std::string { return (user.age > 18) ? user.name : "";

}

);

// Bos atamalardı óshirip taslaw result.erase(

std::remove_if(result.begin(), result.end(),

[](const std::string& name) { return name.empty(); }

),

result.end()

);

return result;

}

int main() {

std::vector<User> users = { {"Áliy", 20}, {"Lepes", 16}, {"Gúlnara", 25}, {"Bekzat", 17}

};

auto adultNames = userDataProcess(users);

// Nátiyjelerdi shıǵarıw

for (const auto& name : adultNames) { std::cout << name << std::endl;

}

return 0;

}

Refaktoring Artıqmashlıqları:

1.Kod qısqardı hám anıq boldı

2.Standard Library algoritmleri qollanıldı

3.Lambda funkciyaları menen qayta islew ámelge asırıldı

4.Iteraciya ámeliyatı optimizaciyalandı

5.Qosımsha tekseriw mexanizmleri kirgizildi

Áhmiyetli Eskertpeler:

const qollanıp derek ózgertiwden saqlanıldı

std::vector konteyneri qollanıldı

Lambda funkciyaları menen joqarı dárejede abstrakciya ámelge asırıldı

Ámeliy Tapsırmalar

1-tapsırma: Kodtı refaktoring qılıw

Tómendegi unamsız strukturalaǵan Python kodın C++ tilinde refaktoring qılıń:

def calculate_grade(score): if score >= 90:

return "A" elif score >= 80:

return "B" elif score >= 70:

return "C" elif score >= 60:

return "D" else:

return "F"

def process_student_grades(students): results = []

for i in range(len(students)):

if students[i]['score'] >= 60: results.append({

'name': students[i]['name'],

'grade': calculate_grade(students[i]['score'])

}) return results

Refaktoring kriteriyleri:

Standard Library algoritmlerin qollao

Lambda funkciyaların paydalanıo

Kod strukturasın jaqsılao

Qosımsha tekseriw mexanizmlerin kirgizio

2-tapsırma: Kod optimizaciyası

Tómendegi kodtı refaktoring qılıp, onıń ónimdarlılıǵın arttırıń:

int factorial(int n) { int result = 1;

for (int i = 1; i <= n; i++) { result *= i;

}

return result;

}

std::vector<int> generateFactorials(int limit) { std::vector<int> factorials;

for (int i = 0; i <= limit; i++) { factorials.push_back(factorial(i));

}

return factorials;

}

Refaktoring tapsırmaları:

Qaytalanatuǵın esaplawlardı optimizaciyalao

Qatelikliklerdi tekseriw mexanizmlerin kirgizio

Sheklewshi parametrlerdi normallastırıo

3-tapsırma: Abstrakciya dárejesin joqarı kóteriw

Tómendegi kodtı qayta islep shıǵıń:

void printStudentInfo(std::string name, int age, double average)

{

std::cout << "Atı: " << name << std::endl; std::cout << "Jaslı: " << age << std::endl;

std::cout << "Ortasha ballı: " << average << std::endl;

}

void processStudentData() {

std::vector<std::string> names = {"Áliy", "Lepes", "Gúlnara"};

std::vector<int> ages = {20, 19, 21}; std::vector<double> averages = {4.5, 4.7, 4.2};

for (int i = 0; i < names.size(); i++) { printStudentInfo(names[i], ages[i], averages[i]);

}

}

Соседние файлы в папке Programmalıq injiniringge kirisiw