1-Mavzu 1-Mavzu Reja: Klass a’zolariga ruxsatni boshqarish


// Ikki o'lchovli ob'ektlar uchun sinf


Download 116.94 Kb.
bet70/100
Sana02.01.2022
Hajmi116.94 Kb.
#200801
1   ...   66   67   68   69   70   71   72   73   ...   100
Bog'liq
dasturiy injinering

// Ikki o'lchovli ob'ektlar uchun sinf

class TwoDShape {

public double Width;

public double Heights-

public void ShowDimO {

Console.WriteLine("Ширина и высота равны " +

Width + " и " + Height);

}

}

TwoDShape klassi asosiy, ya'ni ikki o'lchovli ob'ektlarning muayyan turlarini tavsiflovchi sinflarni yaratish uchun boshlang'ich nuqta bo'lishi mumkin. Misol uchun, quyidagi dasturda TwoDShape klassi Triangle natijaviy sinfini yaratishga xizmat qiladi. Triangle sinfining e'loniga alohida e'tibor bering.

// Sinflarning oddiy ierarxiyasiga misol.

using System;

// Ikki o'lchovli ob'ektlar uchun sinf

class TwoDShape {

public double Width;

public double Height;

public void ShowDimO {

Console.WriteLine("Ширина и высота равны " +

Width + " и " + Height);

}

}

// Triangle sinfi TwoDShape sinfidan olingan  

class Triangle : TwoDShape {

public string Style; // тип треугольника

// Возвратить площадь треугольника,

public double Area() {

return Width * Height / 2;

}

// Uchburchak tipini ko'rsatish

public void ShowStyleO {

Console.WriteLine("Треугольник " + Style);

}

}

class Shapes {

static void Main() {

Triangle tl = new Triangle();

Triangle t2 = new Triangle();

tl.Width = 4.0;

tl.Height = 4.0;

tl.Style = "равнобедренный";

t2.Width = 8.0;

t2.Height = 12.0;

t2.Style = "прямоугольный";

Console.WriteLine("Сведения об объекте tl: ");

tl.ShowStyleO ;

tl.ShowDimO ;

Console.WriteLine("Площадь равна

Console.WriteLine() ;

+ tl.AreaO ) ;

Console.WriteLine("Сведения об объекте t2: ");

t2.ShowStyle();

t2.ShowDim();

Console.WriteLine("Площадь равна " + t2.Area());

}

}

Ushbu dasturni bajarilganda quyidagi natijalar olinadi.

Сведения об объекте tl:

Треугольник равнобедренный

Ширина и высота равны 4 и 4

Площадь равна 8

Сведения об объекте t2:

Треугольник прямоугольный

Ширина и высота равны 8 и 12

Площадь равна 4 8

Triangle sinfida TwoDShape sinfining maxsus tipi yaratiladi (bu holda-uchburchak). Bundan tashqariTriangle klassi TwoDShape sinfining barcha a'zolarini o'z ichiga oladi, xususan, Area() va ShowStyle() metodlari qo'shiladi. Shunday qilib, uchburchak turining tavsifi Style o`zgaruvchisida saqlanadiArea() metodi uchburchakning maydonini hisoblab chiqadi va qaytaradi, ShowStyle() metodi uchburchakning turini ko'rsatadi

TwoDShape sinfini meros qilib olish uchun Triangle sinfida ishlatiladigan sintaksisga e'tibor bering.

class Triangle : TwoDShape {

Ushbu sintaksisni umumlashtirish mumkin. Bir sinf boshqasiga merosxor bo'lib qolganda, asosiy sinf nomi natijaviy sinf nomidan keyin ikki nuqta bilan ajratilgan holda ko'rsatiladi. C# tilida sinfning meros sintaksisi hayratlanarli darajada oddiy va ishlatish uchun qulay.

Triangle sinfi TwoDShape asosiy sinfining barcha a'zolarini o'z ichiga oladi va shuning uchun Width va Height o'zgaruvchilariga Area() metodidan kirishga ruxsat mavjud. Bundan tashqari, Main() metodidagi tl va t2 ob'ektlari to'g'ridan-to'g'ri Width va Height o'zgaruvchilariga, xuddi Triangle sinfining a'zolari kabi murojaat qilishlari mumkin. 11.1-shakl bo'yicha TwoDShape sinfi Triangle sinfiga qanday kiritilganligini sxematik tarzda ko'rsatadi

11.1- shakl. Triangle sinfining sxematik ko`rinishi.

TwoDShape sinf Triangle sinf uchun asosiy bo`lishi bilan bir vaqtda o`zining butunlay mustaqil sinf a`rolariga ega. Agar sinf natijaviy sinf uchun asos bo'lib xizmat qilishi bu sinfdan foydalanish mumkin emas degani emas. Misol uchun, kodning keyingi qismi bunga to'liq ruxsat beradi.

TwoDShape shape = new TwoDShape();

shape.Width = 10;

shape.Height =20;

shape.ShowDim();

Albatta, TwoDShape sinfining ob'ekti TwoDShape sinfidan olingan har qanday sinf bilan bog'liq emas va ularga hech qanday a`zosiga kirish imkoni yo'q.

Quyida asosiy sinfga merosxo`r sinfni e'lon qilishning umumiy shakli keltirilgan.

class natijaviy_sinf_nomi : asosiy_sinf_nomi {

// sinf tanasi

}

Har qanday natijaviy sinf uchun faqat bitta asosiy sinfni belgilash mumkin. C# tilida bir natijaviv sinfida bir nechta asosiy sinflarni meros qilib olish nazarda tutilmaydi. (Shu nuqtai nazardan, C# C++dan farq qiladi, u yerda bir nechta asosiy sinflarni meros qilib olish mumkin. Ushbu holatni C++ kodini C# ga o'tkazishda hisobga olish kerak.) Shunga qaramay, merosning ierarxiyasini yaratish mumkin, unda natijaviy sinf boshqa natijaviy sinf uchun asos bo'lib qoladi. (Albatta, sinflarning hech biri bevosita yoki bilvosita o'zi uchun asosiy bo'lishi mumkin emas.) Lekin har qanday holatda ham, natijaviy sinf uning asosiy sinfining barcha a'zolarini shu jumladan o'zgaruvchi nusxalari, metodlari, xususiyatlar va indeksatorlarni meros qilib oladi.

Merosning asosiy afzalligi quyidagilardan iborat: ko'pgina ob'ektlar uchun umumiy atributlar aniqlangan asosiy sinf yaratilgach, u har qanday aniq natijaviy sinflarini yaratish uchun ishlatilishi mumkin. Har bir natijaviy sinfida o'z tasnifini aniq tuzilishi mumkin. Misol tariqasida, quyida TwoDShape sinfidan olingan va to'rtburchaklarni qamrab oladigan yana bir sinf keltirilgan.

// TwoDShape sinfidan olingan to'rtburchaklar uchun sinf.

class Rectangle : TwoDShape {

// To'rtburchak kvadrat bo'lsa, mantiqiy true qiymatni qaytarish.

public bool IsSquareO {

if(Width == Height) return true;

return false;

}

// To'rtburchakning maydonini qaytarish.

public double Area() {

return Width * Height;

}

}

Rectangle sinfi TwoDShape sinfining barcha a'zolari o'z ichiga olgan holda to'rtburchak kvadrat yoki yo'qligini aniqlash uchun IsSquare() metodi va  shuningdek, to'rtburchak maydoni hisoblash uchun Area() metodlari qo'shiladi.

 


Download 116.94 Kb.

Do'stlaringiz bilan baham:
1   ...   66   67   68   69   70   71   72   73   ...   100




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling