O`ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI
VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
Mustaqil ish
Mavzu: Abstrakt sinflar tashkil etish va ulardan foydalanish usullari.
Bajardi: 003 guruh talabasi
Yoqubov A’zamjon
Tekshirdi: Ishniyazov O.
Toshkent – 2019
Ob’yekt - mavhum (abstrakt) mohiyat bo‘lib, u bizni o‘rab turgan haqiqiy olamning tavsiflariga ega. Ob’yektlarni yaratish va ular ustida manipulyatsiyalar olib borish - C++tilining qandaydir alohida imtiyozi emas, balki ob’yektlarning tavsifi va ular ustida o‘tkaziladigan opyeratsiyalarni kodli konstruktsiyalarda o‘zida mujassamlantiradigan dasturlash myetodologiyasi (uslubiyoti) ning natijasidir. Dasturning har bir ob’yekti, har qanday haqiqiy ob’yekt kabi, o‘z atributlari va o‘ziga xos xulq-atvori bilan ajralib turadi. Ob’yektlarni turli katyegoriyalarga ko‘ra tasniflash mumkin: masalan, myening «Cassio» raqamli qo‘l soatim soatlar sinfiga mansub. Soatlarning dasturiy ryealizatsiyasi (ishlatilishi), standart holat sifatida, sizning kompyutyeringizning opyeratsiya tizimi tarkibiga kiradi.
Ba'zan muayyan ob'ektlarni yaratishni nazarda tutmaydigan sinfni aniqlash kerak bo'ladi. Misol uchun, shaklning klassi. Aslida, aniq raqamlar mavjud: kvadrat, to'rtburchak, uchburchak, doira va boshqalar. Biroq, mavhum raqam o'zi mavjud emas. Shu bilan birga, barcha raqamlar uchun umumiy funksiyalarni o'z ichiga olgan umumiy sinfni aniqlash kerak bo'lishi mumkin. Va mavhum sinflar bunday ob'ektlarni tasvirlash uchun ishlatiladi.
Mavhum sinflar-kamida bitta toza virtual funktsiyani bekor qilmasdan o'z ichiga olgan yoki meros qilib olgan sinflar. Mavhum sinf lotin sinflarini qayta aniqlash uchun interfeysni belgilaydi.
Sof virtual funktsiyalar (sof virtual funktsiyalar) nima? Bu ta'rifga ega bo'lmagan vazifalardir. Virtual funktsiyani toza deb aniqlash uchun uning reklamasi "=0"qiymati bilan yakunlanadi. Misol uchun, biz geometrik shaklni ifodalovchi mavhum sinfni aniqlaymiz:
class Figure
{
public:
virtual double getSquare() = 0;
virtual double getPerimeter() = 0;
virtual void showFigureType() = 0;
};
Shakl klassi mavhum, chunki u kamida bitta toza virtual funktsiyani o'z ichiga oladi. Va bu holda, hatto uch bunday vazifalari. Va funktsiyalarning hech biri amalga oshirilmaydi. Amalga oshirish sinflar-merosxo'rlar tomonidan belgilanishi kerak.
Shunday qilib, biz mavhum sinf ob'ektini yaratish mumkin emas:
Figure figure;
Quyidagi dasturni aniqlang:
#include
class Figure
{
public:
virtual double getSquare() =0;
virtual double getPerimeter() =0;
virtual void showFigureType()=0;
};
class Rectangle : public Figure
{
private:
double width;
double height;
public:
Rectangle(double w, double h) : width(w), height(h)
{
}
double getSquare() override
{
return width * height;
}
double getPerimeter() override
{
return width * 2 + height * 2;
}
void showFigureType()
{
std::cout << "Rectangle" << std::endl;
}
};
class Circle : public Figure
{
private:
double radius;
public:
Circle(double r) : radius(r)
{
}
double getSquare() override
{
return radius * radius * 3.14;
}
double getPerimeter() override
{
return 2 * 3.14 * radius;
}
void showFigureType()
{
std::cout << "Circle" << std::endl;
}
};
int main()
{
Rectangle rect(30, 50);
Circle circle(30);
std::cout << "Rectangle square: " << rect.getSquare() << std::endl;
std::cout << "Circle square: " << circle.getSquare() << std::endl;
return 0;
}
Bu erda mavhum shakl-to'rtburchak (to'rtburchak) va doira (doira) sinfidan merosxo'r ikki sinf mavjud. Vorislar sinflarini yaratishda ularning barchasi aniq virtual funktsiyalar uchun aniq dasturni aniqlab olishlari yoki sof virtual funktsiyani e'lon qilishlari kerak. Ikkinchi holda, lotin sinflari ham mavhum bo'ladi.
Xuddi shu holatda, Circle va Rectangle alohida sinflar bo'lib, barcha virtual funktsiyalarni amalga oshiradi.
Konsol chiqish dasturi:
Shuni ta'kidlash kerakki, mavhum sinf an'anaviy funktsiyalar va o'zgaruvchilarni aniqlay oladi, bir nechta dizaynerlarga ega bo'lishi mumkin, ammo bu mavhum sinfning ob'ektlarini yaratish mumkin emas.
Ushbu mavhumlik klassi asosiy sinf sifatida ishlaydigan
yana bir sinf qanday usulni taniy olishi mumkin?
Agar siz baseClass va Abstract ChildClass esa Base ma'ruza kengaytirilsa ChildClass da abstrakt usulini qo'llashingiz mumkin, aks holda ChildClass abstrac ni ham ko'rishingiz mumkin.
public class ChildClass extends BaseClass{
void display(){
/// Your Implementation here
}
}
abstract class BaseClass{
abstract void display();
}
Sizning savollaringizga javob berish uchun:
Interfeyslar singari, mavhum sinf faqat amalga oshirilmasdan usuli imzosi bo'lishi mumkinmi?
Sizning so'zlaringiz ha yoki javobsiz berish uchun etarli darajada aniq emas. Bir mavhum sinf o'z ichiga usullarini qo'llagan bo'lishi mumkin va qo'llanilmagan abstract usullari bo'lishi mumkin, bu esa abstract deb belgilanishi kerak. abstrakt belgilanmagan bo'lsa, ularni amalga oshirish mumkin bo'lmagan usullari mavjud emas.
Ha bo'lsa: Interfeydan qanday farq qiladi?
Chunki u a'zolarni amalga oshirishga imkon beradi.
Ushbu mavhumlik klassi asosiy sinf sifatida ishlaydigan yana bir sinf qanday usulni taniy olishi mumkin?
Faqat barcha mavhum a'zolarni amalga oshirish kerak.
public abstract class A
{
public abstract void Test();
}
public class B : A
{
public void Test(){ return; }
}
"Abstract class" faqat bitta usul imzoiga ega bo'lishi
mumkinmi? yoki Abstrakt sinf "amaliyotsiz
interfeyslar" faqat usul imzosiga ega bo'lishi mumkinmi? ? Men bosh murabbiy nomim tufayli javobimni o'chirib tashlashga qaror qildim.
qo'shib qo'ydi 04 Iyul 2012 ichida 09:49, muallif Alvin Wong, manba
Thumb qoidasi: mavhum sinflarni ishlatish uchun har doim ega bo'lmagansiz interfeyslarni ishlatish. Interfeys "bir nechta merosga" ruxsat beradi, siz bir nechta interfeyslarni gapiradigan moslamalarni yaratishingiz mumkin. Xulosa klasslari narsalarni yanada arzonlashtiradi, lekin ba'zan ayrim usullarini qo'llash uchun foydalanganda foydali bo'lishi mumkin, ammo barcha mavhum sinf emas.
qo'shib qo'ydi 04 Iyul 2012 ichida 10:21, muallif jpe, manba
8 javoblar
Interface to'liq mavhum bir sinf, Foydalanuvchining profili Faqat imzolarni, dasturlarni, ma'lumotlar a'zolarini anglatmaydi Boshqacha qilib aytganda, abstraktsion sinf kamida bitta mavhum usulga muhtoj Bundan tashqari, uni amalga oshirish mumkin. Bundan tashqari, u vorislariga meros bo'lib o'tadigan ma'lumotlar a'zolarini ham o'z ichiga olishi mumkin.
Voris uni amalga oshirish uchun mavhum usulni bir xil imzo bilan qo'llashi kerak
2
qo'shib qo'ydi 04 Iyul 2012 ichida 09:58 muallif liorafar manba
Abstrakt sinf ilovalarni o'z ichiga olishi mumkin, ammo u shart emas. Bu interfeyslardan farq qiladi.
abstract class classA
{
abstract public void MethodA();
public void MethodB()
{
Console.WriteLine("This is MethodB inside ClassA");
}
}
class classB : classA
{
public override void MethodA()
{
Console.WriteLine("This is MethodA inside class B");
}
}
Agar siz mavhum baz sinfida usulni qo'llayotgan bo'lsangiz va uni keyinroq bekor qilmoqchi bo'lsangiz, uni virtual deb e'lon qilishingiz kerak.
virtual protected void MethodC(){
//this can be overridden
}
2
qo'shib qo'ydi 04 Iyul 2012 ichida 09:58 muallif JonC manba
q1: Xulosa klass usuli va oddiy usullarini o'z ichiga olishi mumkin.
q2: http://docs.oracle.com/javase/tutorial/ dan java/IandI/abstract.html
//this is the abstract class
public abstract class GraphicObject {
abstract void draw();
}
//this is the implementation
class Rectangle extends GraphicObject {
void draw() {
...
}
}
Do'stlaringiz bilan baham: |