Professional Documents
Culture Documents
gachechiladze_lela@yahoo.com
აბსტრაქტული კლასები
აბსტრაქტული ეწოდება კლასს, თუ ის ერთ ან რამდენიმე აბსტრაქტულ მეთოდს
მოიცავს.
აბსტრაქტული მეთოდი ეწოდება მეთოდს, რომელიც გამოცხადებულია (დეკლა-
რირებულია), მაგრამ არ არის რეალიზებული.
აბსტრაქტული კლასებიდან მემკვიდრეობით უნდა მივიღოთ და რეალიზება გა-
ვუკეთოთ მის ყველა აბსტრაქტულ მეთოდს და მხოლოდ ამის შემდეგ არის შე-
საძლებელი მემკვიდრე კლასის ეგზემპლარის შექმნა.
პითონში აბსტრაქტულ კლასებთან სამუშაოდ abc (Abstract Base Class) მოდული
გამოიყენება.
მაგალითისთვის ავიღოთ ჭადრაკი. ცნობილია, რომ ჭადრაკის ყველა ფიგურას
საერთო ფუნქციონალი გააჩნია, კერძოდ: ფიგურის მოძრაობა და დაფაზე გამოსახვა.
აქედან გამომდინარე, ჩვენ შეგვიძლია შევქმნათ ფიგურის აბსტრაქტული კლასი და
განვსაზღვროთ მასში აბსტრაქტული მეთოდი, მაგალითად მოძრაობის, რადგან
ყველა ფიგურა თავისებურად მოძრაობს. შემდეგ კი, მოვახდინოთ საერთო ფუნქ-
ციონალის რეალიზება.
gachechiladze_lela@yahoo.com 2
აბსტრაქტული კლასისა და მეთოდის
ამსახველი პროგრამული კოდი:
class ChessPiece(ABC):
# საერთო მეთოდი
def draw(self):
print("Drew a chess piece")
class Advanced(Basic):
def hello(self):
super().hello()
print("Enriched functionality")
a = Advanced()
a.hello()
gachechiladze_lela@yahoo.com 5
მეტაკლასები
კლასები ობიექტების შესაქმნელად გამოიყენება, მეტაკლასები კი - თავად კლა-
სების შესაქმნელად. მეტაკლასები კლასების ქცევის შესაცვლელად, ან დასამატებ-
ლად არსებობს.
დავუშვათ, გვინდა დარწმუნებული ვიყოთ, რომ ჩვენ ყოველთვის ვქმნით
SchoolMember კლასის ქვეკლასის ეგზემპლარებს და არა თავად SchoolMember კლა-
სის ეგზემპლარებს. ამ მიზნის მისაღწევად შეგვიძლია გამოვიყენოთ კონცეფცია:
„აბსტრაქტული საბაზო კლასები“. ეს ნიშნავს, რომ კლასი აბსტრაქტულია, ანუ ის
რაღაც კონცეფციას წარმოადგენს, რომელიც რეალური კლასის როლში გამოსაყე-
ნებლად არ არის გამიზნული. ჩვენი კლასი შეგვიძლია გამოვაცხადოთ, როგორც
აბსტრაქტული საბაზო კლასი. ამისთვის ABCMeta სახელის მქონე ჩადგმული
კლასი შეგვიძლია გამოვიყენოთ.
gachechiladze_lela@yahoo.com 6
აბსტრაქტული კლასის ამსახველი პროგრამა:
class SchoolMember(metaclass=ABCMeta):
self.name=name
self.age=age
@abstractmethod
def tell(self):
gachechiladze_lela@yahoo.com 7
აბსტრაქტული კლასის ამსახველი პროგრამა
(გაგრძელება):
class Teacher(SchoolMember):
super().__init__(name, age)
self.salary=salary
def tell(self):
super().tell()
print()
gachechiladze_lela@yahoo.com 8
აბსტრაქტული კლასის ამსახველი პროგრამა
(გაგრძელება):
class Student(SchoolMember):
super().__init__(name, age)
self.marks=marks
def tell(self):
super().tell()
gachechiladze_lela@yahoo.com 9
აბსტრაქტული კლასის ამსახველი პროგრამა
(გაგრძელება):
t = Teacher('ლელა გაჩეჩილაძე', 50, 30000)
s = Student('ბექა რაზმაძე', 20, 75)
print()
members=[t,s]
for member in members:
member.tell()
შედეგები:
gachechiladze_lela@yahoo.com 10
7 ÷10 სლაიდებზე წარმოდგენილი კოდის
ანალიზი
SchoolMember კლასის tell() მეთოდი ჩვენ აბსტრაქტულ მეთოდად გამოვაცხა-
დეთ და ამგვარად, SchoolMember კლასის ეგზემპლარის შექმნა ავტომატურად
ავკრძალეთ. მიუხედავად ამისა, ჩვენ შეგვიძლია Teacher და Student ეგზემპლა-
რებთან მუშაობა ისე, თითქოს ისინი SchoolMember კლასის ეგზემპლარები იყოს,
რადგან ეს კლასები ქვეკლასებს წარმოადგენს.
ამგვარად, ჩვენ გავეცანით ობიექტზე ორიენტირებული დაპროგრამების მთელ
რიგ დადებით მხარეებს და ე.წ. „წყალქვეშა ქვებს“.
პითონი უმაღლესი ხარისხის ობიექტზე ორიენტირებული ენაა, ამიტომ ამ
პრინციპების ცოდნა მნიშვნელოვანია!
gachechiladze_lela@yahoo.com 11
აბსტრაქტული კლასის ამსახველი
პროგრამის ნიმუში:
from abc import *
class parent(metaclass=ABCMeta): #აბსტრაქტული საბაზისო კლასი
def __init__(self, a):
self.a=a
@abstractmethod #აბსტრაქტული მეთოდი
def area(self):
print("გამოთვლა:")
class child(parent):
def __init__(self, a, b):
parent.__init__(self, a)
self.b=b
print("a=", self.a, " ", "b=", self.b, sep='')
def area(self):
parent.area(self) შედეგები:
s=self.a*self.b
print("მართკუთხედის ფართობი=", s, sep='')
a=10 b=12
ob=child(10,12)
გამოთვლა:
ob.area()
მართკუთხედის ფართობი=120
gachechiladze_lela@yahoo.com 12
გისურვებთ წარმატებულ სწავლას!
gachechiladze_lela@yahoo.com 13