Polimorfizm va virtual metodlar



Yüklə 30,86 Kb.
səhifə1/5
tarix20.11.2023
ölçüsü30,86 Kb.
#162276
  1   2   3   4   5
Polimorfizm va virtual metodlar


Polimorfizm va virtual metodlar

1.Polimorfizm va virtual metodlar


Nasl qoldirish vositasida OYDning uchinchi muhim printsipi– polimorfizm joriy qilinadi. Polimorfizm – bu bir xil interfeysli ob'ektlarning o'zaro almashinuvidir, ya'ni bir xildagi signaturaga va xossalarga ega bo'lgan metodlar naboridir.

class базовый_класс


{
доступ virtual тип имя_метода(параметры)
{
// тело метода
} }
class производный_класс : базовый_класс
{
доступ override тип имя_метода(параметры)
{
// тело метода
} }
Bu sxemada ruxsat- ruxsat spetsifikatori, tip – tip, metodta qaytariladigan qiymat, parametrlar- metod tomonidan kutiladigan formal' parametrlar ro'yxati

2.Metodlarni yashirish va qayta ishlash


class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public virtual void Display()
{
Console.WriteLine(Name);
} }
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company) : base(name)
{
Company = company;
} }
Bu kodta Person klassi odamni ifodalaydi. Employee klassi Person klassidan meros oladi va u korxona ishchisini ifodalaydi. Employee klassi ota klassdan meros olgan Name xossasidan tashqari Company xossasiga ham ega
3 Abstrakt sinflar va ularni e'loni.
Abstrakt sinflar
Oddiy darslardan tashqari C# da abstrakt sinflar mavjud. Ular nima uchun kerak? Sinflar odatda qandaydir ob'ekt yoki ob'ekt uchun qandaydir rejani ifodalaydi. Masalan, avtomobillarni ifodalash uchun Car sinfini yoki odamlarni ifodalash uchun Person sinfini ushbu sinflarga ushbu ob'ektlarni tavsiflovchi tegishli xususiyatlar, maydonlar va usullarni joylashtirish orqali belgilashimiz mumkin. Biroq, biz dasturlash tilidan foydalangan holda ifodalamoqchi bo'lgan ba'zi ob'ektlar o'ziga xos dasturga ega bo'lmasligi mumkin. Masalan, aslida bunday geometrik shakl yo'q. Doira, to'rtburchak, kvadrat bor, lekin oddiygina raqam yo'q. Biroq, aylana ham, to'rtburchak ham umumiy narsaga ega va ular raqamlardir. va aniq amalga oshirishga ega bo'lmagan bunday ob'ektlarni tavsiflash uchun mavhum sinflar mo'ljallangan.
Abstrakt sinf oddiy sinfga o'xshaydi. Bundan tashqari, o'zgaruvchilar, usullar, konstruktorlar, xususiyatlar bo'lishi mumkin. Yagona narsa shundaki, mavhum sinflarni belgilashda mavhum kalit so'z ishlatiladi. Masalan, transport vositasini ifodalovchi mavhum sinfni aniqlaylik

abstract class Transport


{
public void Move()
{
Console.WriteLine("Transportno sredstvo dvijetsya");
} }

4. Abstrakt sinflarni


Abstrakt sinflarni aniqlashning umumiy formati quyidagi ko'rinishga ega:

abstract class sinf nomi


{
// sinf tanasi
}
Abstrakt sinflardan foydalanib, tekislikda geometrik figuralar bilan ishlash uchun sinflar ierarxiyasini tuzamiz. Avval Shape abstrakt figuralar sinfini tuzamiz, so'ngra undan hosil bo'lgan Triangle uchburchak va Quadrangle kvadrat sinflarini hosil qilamiz.
5. Vorislik (Nasledovanie)
Vorislik bu mavjud bo'lgan sinf asosida yangi sinfni tavsiflab beradi, shu bilan birga joriy sinfning xossa va funktsionalligi yangi sinfda saqlanadi. Yangi hosil qilingan sinf joriy sinfning funktsionalligiga o'zining xususiy masalasi uchun zarur bo'lgan maydonlarni qo'shishi mumkin. Vorislik qoldirgan (o'tkazgan) sinfga tayanch (bazoviy) sinf deb, yoki ota-ona (roditel'skiy) sinfi deb aytiladi. Tayanch sinfidan kelib chiqqan yoki hosil bo'lgan sinflarga avlodlar (potomki) deb, avlodni (naslni) davom ettiruvchilari (nasledniki) yoki hosilaviy (proizvodnimi) sinflar deb aytiladi.
class Pet
{
private string sName;
private int iAge;
public string Name
{
get
{
return sName;
}
}
public int Age
{
get
{
return iAge;
}
protected set
{
iAge = value;
} }
public Pet(string Name)
{
sName = Name;
iAge = 0;
}
}

6. Interfeyslarning aniqlanishi va qo'llanilishi.


Interfeyslar Interfeysni aniqlash uchun interface kalit so'zi ishlatiladi. Odatda, C # dagi interfeys nomlari I bosh harf bilan boshlanadi, masalan, IComparable, IEnumerable, ammo bu majburiy talab emas, balki ko'proq dasturlash uslubi. Interfeys nimani belgilashi mumkin? Umuman olganda, interfeyslar quyidagi ob'ektlarni belgilashi mumkin: Metodlar Xususiyatlari Indeksatorlar Hodisalar Quyida interfeys sintaksisining soddalashtirilgan shakli keltirilgan: interface interfeys_nomi{ qiymat_turi metod_nomi_1 (parametrlar_ro'yxati); qiymat_turi metod_nomi_2 (parametrlar_ro'yxati); // ... qiymat_turi metod_nomi_N (parametrlar_ro'yxati); }

using System;


namespace MyApplication
{
interface IAnimal // Interface
{
void animalSound();
}
class Pig : IAnimal
{
public void animalSound()
{
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig();
myPig.animalSound();
} } }

7.Interfeyslarda metodlar e'lon qilish, vorislarida ularni qayta aniqlash va qo'llash.


Interfeys metodlarini e'lon qilishda faqat qiymat qaytarish turi va signaturasidan foydalaniladi. Ular mohiyatan abstrakt metodlardir. Yuqorida aytib o'tilganidek, interfeysda hech qanday dastur bo'lishi mumkin emas. Shuning uchun interfeysning barcha metodlari ushbu interfeysni o'z ichiga olgan har bir sinfda amalga oshirilishi kerak. Interfeysning o'zida metodlar bevosita ochiq (public) deb hisoblanadi, shuning uchun ularga kirish huquqini aniq ko'rsatishingiz shart emas.

namespace MyApplication


{
interface I1_Interface
{
void myMethod1(); // interface method
}
interface I2_Interface
{
void myMethod2(); // interface method
}
class voris : I1_Interface, I2_Interface
{
public void myMethod1()
{
Console.WriteLine("Some text..");
}
public void myMethod2()
{
Console.WriteLine("Some other text...");
} }
class Program
{
static void Main(string[] args)
{
voris myObj = new voris();
myObj.myMethod1();
myObj.myMethod2();
} }

9. Sinf vorislik


Vorislik (inheritance) Obyektga Yonaltirilgan Dasturlash(OYD)ning muhim tamoyillaridan biridir. voris orqali bir sinf boshqa sinfning funksionalligini o'zlashtirishi mumkin, ya'ni voris sinflar umumiy xususiyatlarni vorislik bilan olgan holda, ayrim xususiyatlarni qayta aniqlash orqali yoki yangi xususiyat kiritish orqali tayanch sinfga o'zgartirish mumkin. Shu sababli hosilaviy sinflarni aniqlash sezilarli ravishda kamayadi, chunki unga tayanch sinfdan farqli elementlar qo'shiladi. Aytaylik, bizda alohida shaxsni tavsiflovchi quyidagi Person sinfi mavjud:


class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public void Display()
{
Console.WriteLine(Name);
} }
10. Umumlashtirish turlari
Umumlashtirish mexanizmi mazmuni kuyidagicha. Ishlab chikaruvchi algoritmni aniklaydi, masalan, saralash, kidirish, almashtirish, kayta tiklash va b. Lekin anik bir ishlatiladigan algoritmga tegishli ma'lumotlar turini ko'rsatish kerak emas.
Aynan shuning uchun algoritmni umumlashtirib boshka turli xil tur ob'ektlariga ko'llash mumkin. Tayyor algoritmni ko'llagan xolda boshka tuzuvchi fakatgshina anik turni ko'rsatadi. Masalan, saralash uchun Integer, String yoki xattoki Record va Class. Kodni, ko'llanilgan shablonlar, unga kerakli tur ma'lumotlar ichidan bitta ko'rsatkich bo'yicha o'ziga kerakli tur ma'lumotni uzatadi xolos.

12. Istisnolarni qayta ishlash. Istisnolar ularning turlari.


Istisnolar. Istisnolar turlari.
NET platformasida istisnolarni qayta ishlash bloklarining tuzilishi Istisnolarni tizimli boshqarish bilan dasturlash o'zaro bog'liq to'rtta ob'ektdan foydalanishni o'z ichiga oladi: • istisno tafsilotlarini ifodalovchi sinf turi; • tegishli holatlarda chaqiruv kodiga istisnolar sinfining misolini yozishga qodir a'zo; • istisno qilishga moyil bo'lgan a'zoga kiruvchi murojaat qiluvchining kod bloki; • murojaat qiluvchining kodi, agar u paydo bo'lsa, istisnolarni hal qiladi (yoki ushlaydi).

int[] myNumbers = {1, 2, 3};


Console.WriteLine(myNumbers[10]); // error!
1. using System;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
try
{
int[] myNumbers = {1, 2, 3};
Console.WriteLine(myNumbers[10]);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
} } }
2. catch (Exception e)
{
Console.WriteLine("Xatolik yuz berdi!");
}
using System;
namespace ErrorHandlingApplication {
class Bolish {
int result;
Bolish() {
result = 0;
}
public void b(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
} }
static void Main(string[] args) {
Bolish d = new Bolish();
d.b(25, 0);
Console.ReadKey();
} }



Yüklə 30,86 Kb.

Dostları ilə paylaş:
  1   2   3   4   5




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin