|
Vektorli dasturlash(iteratorlar bilan ishlash)
|
bet | 24/30 | Sana | 27.01.2024 | Hajmi | 0,99 Mb. | | #146980 |
Bog'liq PARADIGMA YN31.Vektorli dasturlash(iteratorlar bilan ishlash)
begin() va end() iteratorlari mos ravishdaxotirada vektorning birinchi elementini va oxirgi elementidan keyingi adresni ko‘rsatadi.Shu o‘rinda iterator nimaligiga aniqlik kiritsak. Iterator bi birorta o‘zgaruvchiga ko‘rsatkich hisoblanadi. Iterator bizga kerak qiymatlarni qayerdaligini biladi va uning qiymatini bizga chiqarib beradi. Itaratorlar asosan konteynerlar bilan ishlashda qo‘llaniladi. Iterator yaratish uchun quyidagini yozish kerak:
iterator_nomi::iterator nomi;
Masalan:vector ::iterator begin=vec.begin();
string::iterator end,cur;
Satrlar ham konteyner hisoblanadi. Endi iterator ko‘rsatayotgan element quyidagicha olinadi.
cout<<*cur<
Bu erda tushunarliki, * belgisi cur iteratorni emas, u ko‘rsatayotgan qiymatni ko‘rsatadi.
cur++; // keying elementga o‘tish
cur+=10; // <=>cur=cur+10 10 ta elementdan keyinga o‘tish
Vektor elementlarinni iterator bilan ekranga chiqarishni ko‘ramiz:
vector test;
string buffer = "";
//elementlarni kiritilsh
do {
getline(cin, buffer);
if (buffer.size() > 0) test.push_back(buffer);
} while (buffer != "");
vector::iterator cur;
for (cur=test.begin();cur
cout<<*cur<
misol: #include
#include
using namespace std;
int main() { vector numbers = {1, 4, 2, 8, 5};
for (auto it = numbers.begin(); it != numbers.end(); ++it) { cout << *it << " "; }
cout << std::endl;
sort(numbers.begin(), numbers.end());
for (int num : numbers) {cout << num << " "; }
std::cout << std::endl;}
32. S. Obʼyektga yo‘naltirilgan dasturlash paradigmasi(sinflar va obyektlar bilan ishlash)
J. Ob'ektga yo'naltirilgan dasturlash (qisqacha. OOP) dasturni o'zaro ta'sir qiluvchi ob'ektlar to'plami sifatida ifodalashga asoslangan dasturlash metodologiyasi bo'lib, ularning har biri ma'lum bir sinfning namunasi bo'lib, sinflar meros ierarxiyasini tashkil qiladi. Hozirgi kunga OOP - bu eng mashhur rivojlanish paradigm hisoblanadi. Ob'ektga yo'naltirilgan dasturlash, dasturlash muhitida eng katta ta'sir ko'rsatdi. Ob'ektga yo'naltirilgan dasturlash 1960-yillarning oxirida Simula dasturlash tilining paydo bo'lishi bilan paydo bo'lgan. Yillar davomida Smalltalk ob'ektga yo'naltirilgan dasturlash paradigmasini takomillashtirgan. Python, Java, C va C# tillari bugungi kunda eng mashhur ob'ektga yo'naltirilgan tillar qatoriga kiradi. OOP 4 ta asosiy qurilish bloklarini o'z ichiga oladi: 1. sinflar 2. Atributlat. 3. Usullar 4. Obyektlar. 1. Sinflar ob'ektlarni tasvirlash uchun shablonlarni taklif qiladi. Sinflar asosan ob'ektlarni yaratish uchun sxema bo'lib xizmat qiladi. Sinf ichida dasturchilar tegishli ob'ektlar tomonidan havola qilinadigan o'zgaruvchilar va usullarni belgilashlari kerak. Avtomobil misolida sinf avtomobil ob'ektining xususiyatlarini ifodalaydi, avtomobilning funksionalligini qamrab oladi va birinchi navbatda avtomobilni sinf sifatida e'lon qiladi. Ob'ektlar. Ob'ektlar sinflar bilan birga mavjud. Aslini olganda, bu dasturchi aniqlay oladigan aniq tuzilishga ega bo'lgan ma'lumotlar maydonlari. Ob'ekt chaqirilgandan so'ng, dastur misol yaratadi. Ob'ektga murojat qilish uchun mashinaning o'ziga xos rangi va turi kabi sinfga tegishli ma'lumotlarni taqdim etish kerak bo'ladi.
avtomobil = Avtomobil ('qizil', 'Sedan')
Yuqoridagi kod noyob avtomobil ob'ektining ma'lum bir nusxasini rasmiy ravishda o'rnatadi.
Haydash usuli qanday ishlashini ko'rishingiz mumkin.
car.drive()
33) Ob’ektga yo’naltirilgan dasturlash(merosxo’rlik, inkapsulyatsiya)
Ob'ektga yo'naltirilgan dasturlash-bu bir-biriga xabar yuboradigan ob'ektlarni aniqlash atrofida aylanadigan dasturlash paradigmasi. Ushbu ob'ektlar o'zlarining ommaviy va ichki interfeyslarini ham o'z ichiga oladi. Ob'ektga yo'naltirilgan dizaynni muvaffaqiyatli amalga oshirish uchun ob'ektga yo'naltirilgan dizaynning 4 ustuni deb nomlanuvchi 4 ta asosiy ustunni diqqat bilan va intuitiv ravishda ko'rib chiqish kerak:
Abstaction
Inheritance
Encapsulation
Polymorphism
Inheritance(Meros olish):
Barcha dasturlash tillari uchun meros olish turlari.
Dasturlash tiliga qarab, merosning turli xil turlari mavjud. Biroq, Ruby sinflar o'rtasida faqat bitta merosga ruxsat beradi va kichik sinflarni yaratishda “mixin” deb ataladigan narsalardan foydalanadi.
“Ruby” da bitta meros olishga misol:
|
class Animal
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
end
|
|
|
|
class Dog < Animal
|
|
def make_noise
|
|
puts 'Woof'
|
|
end
|
|
end
|
|
|
|
my_dog = Dog.new()
|
|
my_dog.make_noise
|
Yuqoridagi kodda Dog klassi Animal sinfining xatti-harakatlarini meros qilib oladi va Dog-dan o'rnatilgan har qanday ob'ekt Animal-dan funksiyalarni chaqirishi mumkin. Bunday holda, Dog sinfidan olingan ob'ektlar uchun Animal-dan konstruktor usuli chaqiriladi.
Ruby-dagi meros bir nechta sinflardan umumiy xatti-harakatlarni ajratib olishga va ularni bitta super sinfga o'tkazishga yordam beradi. Meros, shuningdek, mavhumlik deb hisoblanadi, chunki biz takrorlanadigan kodni olib tashlaymiz va uni umumlashtirilgan blokga joylashtiramiz, bu dasturni nima qilayotgani va muayyan xatti-harakatlar ortidagi maqsadlarga nisbatan tushunarli qiladi.
Encapsulation(Inkapsulyatsiya)
Inkapsulyatsiyaga yana bir yondashuv - bu "bog'lash". Inkapsulyatsiya turli sinflar, usullar va o'zgaruvchilarni oladi va ularni havolalar uchun bir butunga birlashtiradi.
Bunday birlashma boshqa mavhumlik qatlamini qo'shib, dasturchining bilim yukini kamaytirishga yordam beradi. Inkapsulyatsiya, shuningdek, dasturchilar holatlar va xatti-harakatlarni tasodifan o'zgartirmasliklari uchun holatlar va xatti-harakatlarni to'g'ridan-to'g'ri kirishdan yashirishi mumkin. Inkapsulyatsiya ko'plab Ruby bo'shliqlarida uchraydi, bu erda ba'zi misollar:
O'zgaruvchilar
Funksiyalar
Sinflar
O'zgaruvchilar private va protected kalit so'zlar bilan qamrab olinishi mumkin . Private kalit so'z ma'lumotlarni umumiy usul interfeysidan yashiradi va ularni sinf tashqarisidan to'g'ridan-to'g'ri kirish mumkin emas. Quyida private kalit so'z bilan inkapsulyatsiya misoli keltirilgan:
class Dog
|
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
|
|
def to_s
|
|
"My name is #{name}"
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :name
|
|
end
|
|
|
|
my_dog = Dog.new()
|
|
puts my_dog
|
Yuqoridagi kodda usullarni o'z ichiga olgan bitta modul yaratiladi: dog klassi. Sinf aniqlangandan so'ng, uning umumiy interfeysini aniqlash kerak. 2-qatordagi Initialize konstruktor usuli va 6-8-qatordagi to_s misol usuli dog sinfining umumiy interfeysining bir qismidir. Initialize va to_s sinflari sinfdan tashqarida mavjud. Biroq, 12-qator uchun belgilangan getter usulining nomi Private kalit so'zi bilan qiziquvchan ko'zlardan yashiringan. Bu blok ichidagi keraksiz ommaviy ma'lumotlarga kirishni cheklaydigan inkapsulyatsiyaning yakuniy bosqichidir.
OutsideDog doirasidan Getter usuli nomini chaqirganda, NoMethodError xatosi paydo bo'ladi, chunki bu doirada mavjud usul yo'q. Bundan tashqari, name misoli o'zgaruvchisi sinfdan tashqarida yashiringan, shuning uchun it nomiga kirishning yagona usuli to_s usuli hisoblanadi.
|
| |