|
Dasturlash uslublari va paradigmalar
|
bet | 26/30 | Sana | 26.01.2024 | Hajmi | 0,97 Mb. | | #146384 |
Bog'liq PARADIGMA YNStatik polimorfizm
Bundan tashqari, kompilyatsiya vaqtining polimorfizmi, statik bog'lanish, kompilyatsiya vaqtining bog'lanishi, erta bog'lanish va usullarning haddan tashqari yuklanishi deb ataladi. Bu erda bitta sinfda ko'plab shakllar mavjud. Bu aslida usullarning haddan tashqari yuklanishi. Usullarning haddan tashqari yuklanishi - bu bir xil usul nomiga ega, ammo turli xil argumentlarga ega bo'lgan bir nechta usullarning mavjudligi (qaytish turi bir xil bo'lishi mumkin yoki bo'lmasligi mumkin). Bu erda, usullarni chaqirganda, kompilyator qo'ng'iroq paytida berilgan parametrlarga qarab qaysi usulni chaqirishni tanlaydi. Bu kompilyatsiya vaqtida sodir bo'ladi.
Misol(Java tilida):
class Calculator {
void add(int a, int b) {
System.out.println(a+b);
}
void add(int a, int b, int c) {
System.out.println(a+b+c);
}
}public class Demo {
public static void main(String args[]) {
Calculator calculator = new Calculator(); // method with 2 parameters is called
calculator.add(10, 20); //output: 30 // method with 3 parameters is called
calculator.add(10, 20, 30); //output: 60
}
}
35) Ob’ektga yo’naltirilgan dasturlash(oqimlar bilan ishlash)
Ob'ektga yo'naltirilgan dasturlashda (OOP) oqimlar bilan ishlash parallellikka erishish va samaradorlikni oshirish uchun bir vaqtning o'zida kodni bajarishni o'z ichiga oladi. Oqimlar-bu bir vaqtning o'zida bir nechta vazifalarni bajarishga imkon beradigan dasturda parallel ravishda bajarilishi mumkin bo'lgan engil jarayonlar. OOP oqimlari bilan ishlash bilan bog'liq ba'zi asosiy tushunchalar: Oqimlar bilan ishlash asoslari: Oqim yaratish: OOP-da oqimlar dasturlash tiliga qarab Thread sinfini kengaytirish yoki Runnable interfeysini amalga oshirish orqali yaratilishi mumkin. Masalan, Java-da siz thread sinfini kengaytirishingiz va run usulini bekor qilishingiz yoki Runnable interfeysini amalga oshirishingiz va Run usulini amalga oshirishingiz mumkin.
// Extending Thread class
class MyThread extends Thread {
public void run() {
// Thread logic here }}
// Implementing Runnable interface
class MyRunnable implements Runnable {
public void run() {
// Thread logic here }}
Oqim boshlanishi: oqimlar start usulini chaqirish orqali boshlanadi. Ushbu usul yangi ish oqimida run usulini chaqiradi.
Sinxronizatsiya:
OOP-da sinxronizatsiya bir vaqtning o'zida bir nechta oqimlarning umumiy manbalarga kirishida juda muhimdir. Bu ma'lumotlarning buzilishi oldini oladi.
Kodning muhim qismlariga kirishni boshqarish uchun sinxronlashtirilgan usullar yoki bloklardan foydalanish kerak.
class SharedResource { private int counter = 0;
public synchronized void increment() { // Thread-safe increment
counter++; }}
Oqim xavfsizligi: Sinflarni bir vaqtning o'zida bir nechta oqimlar kirishi mumkin bo'lsa, ular oqimga xavfsiz bo'lishi uchun loyihalashtirish kerak.Ma'lumotlarning nomuvofiqligini oldini olish uchun sinxronizatsiya, atom operatsiyalari yoki boshqa oqimga chidamli dizaynlardan foydalanish kerak. Oqimlarning aloqasi: Oqimlar ko'pincha o'zaro ta'sirlashishi yoki muvofiqlashtirilishi kerak. Bunga Java-da wait, notify va notifyAll kabi usullar yordamida erishish mumkin.
class SharedResource {private boolean flag = false;
public synchronized void waitForFlag() throws InterruptedException {
while (!flag) { wait(); // Release the lock and wait }}
public synchronized void setFlag() { flag = true;
notifyAll(); // Notify waiting threads }}
Oqim hovuzlari: Oqim havzalaridan foydalanish oqimlarning hayot aylanishini yanada samarali boshqarish imkonini beradi. Oqim hovuzlari mavjud oqimlarni qayta ishlatadi, bu esa oqimlarni yaratish va yo'q qilish uchun qo'shimcha xarajatlarni kamaytiradi.
Istisnolarni qayta ishlash:Ko'p tishli dasturlarda istisnolarni to'g'ri qayta ishlash juda muhimdir. Bitta ipdagi xom istisnolar butun dasturning barqarorligiga ta'sir qilishi mumkin.
Puffinlar va poyga shartlari: Resurslarning bir-biridan ozod bo'lishini kutib, ikki yoki undan ortiq oqim to'sib qo'yilgan o'lik holatlarga ehtiyot bo'ling.
Dasturning xatti-harakati voqealarning nisbiy vaqtiga bog'liq bo'lgan poyga vaziyatlaridan ehtiyotkorlik bilan qochish kerak.
Parallel oqimlar bilan ishlash uchun yordamchi dasturlar:
Ko'pgina dasturlash tillari va kutubxonalari oqimlarni osonlashtiradigan parallellik va ramka yordam dasturlarini taqdim etadi. Masalan, Java-da Java to'plami.util.concurrent ExecutorService, Future va turli concurrent to'plamlari kabi yuqori darajadagi dizaynlarni taklif etadi.
36) Ob’ektga yo’naltirilgan dasturlash(istisnolar bilan ishlash)
Istisnolarni qayta ishlash ob'ektga yo'naltirilgan dasturlashning (OOP) muhim jihati bo'lib, ishlab chiquvchilarga o'z kodlarida kutilmagan xatolar va istisno stsenariylarni engishga imkon beradi. Istisnolarni qayta ishlashning samarali mexanizmlarini amalga oshirish orqali dasturchilar o'z ilovalarining ishonchliligi va barqarorligini oshirishi mumkin. Ushbu maqola Java va Python-da asosiy tushunchalar va amaliy misollarni o'z ichiga olgan OOP istisnolarini qayta ishlashni batafsil ko'rib chiqadi.
Istisnolar nima?Istisnolar-bu dasturni bajarish paytida yuz berishi mumkin bo'lgan kutilmagan hodisalar.OOP-da istisnolar ko'pincha ob'ektlar sifatida taqdim etiladi va xato yoki favqulodda vaziyat yuzaga kelganda tashlanishi mumkin.
Try-Catch –Finally Bloklar:Istisnolarni qayta ishlash odatda "try", "catch" va "finally"bloklardan foydalanishni o'z ichiga oladi."try" blokida istisnoga olib kelishi mumkin bo'lgan kod mavjud."Catch" bloki ushlanadigan istisno turini belgilaydi va istisnoni qayta ishlash uchun kodni o'z ichiga oladi."finally" blokda istisno sodir bo'lganmi yoki yo'qmi, bajarilishi kerak bo'lgan kod mavjud.Istisno ierarxiyasi: OOPdagi istisnolar ierarxiya shaklida tashkil etilgan bo'lib, unda aniqroq istisnolar umumiylardan meros bo'lib o'tadi.
Bunday ierarxiya ishlab chiquvchilarga o'ziga xos istisnolarni qo'lga kiritishga va shu bilan birga umumiyroq istisnolarni qayta ishlashga imkon beradi.
Practical Examples in Java:
Example 1: Arithmetic Exception
public class ArithmeticExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // Division by zero
} catch (ArithmeticException e) {
System.out.println("An arithmetic exception occurred: " + e.getMessage()); } }}
|
| |