
Programmalıq injiniringge kirisiw / 14-ameliy PI_K
.pdf14-á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]);
}
}