სარჩევი[დამალვა][ჩვენება]
დეველოპერებს შორის ობიექტზე ორიენტირებულმა პროგრამირებამ დიდი მიმდევარი მიიპყრო. პოპულარული კომპიუტერული ენა Python ასევე იცავს ობიექტზე ორიენტირებულ პარადიგმას.
ის ეხება პითონში ობიექტების და კლასების განსაზღვრას, რაც საფუძველს უქმნის OOPs პრინციპებს. ამ გაკვეთილზე „ობიექტზე ორიენტირებული პროგრამირების პითონში“ თქვენ შეისწავლით როგორ გამოაცხადოთ პითონის კლასები, შექმნათ ობიექტები მათგან და გამოიყენოთ ოთხი OOP-ის ტექნიკა.
ასე რომ, პირველ რიგში.
რა არის ობიექტზე ორიენტირებული პროგრამირება?
ობიექტზე ორიენტირებული პროგრამირების (OOP) მთავარი აქცენტი არის "ობიექტების" შექმნა. ურთიერთდაკავშირებული ცვლადების და ფუნქციების ერთობლიობა ქმნის ობიექტს.
ამ ცვლადებს ხშირად უწოდებენ ობიექტის ატრიბუტებს და მის ქცევებს ხშირად უწოდებენ მის ფუნქციებს. ეს ელემენტები განაცხადს უფრო ეფექტურ და გასაგებ სტრუქტურას აძლევს. ავტომობილი ნივთის მაგალითია.
ავტომობილი რომ იყოს ნივთი, მისი ატრიბუტები მოიცავდა ისეთ ნივთებს, როგორიცაა მისი ფერი, მოდელი, ფასი, ბრენდი და ა.შ. გარდა ამისა, ის აჩქარებდა, შეანელებდა და ცვლიდა გადაცემას.
კიდევ ერთი ილუსტრაცია: თუ ძაღლს მივიჩნევთ როგორც ნივთს, მაშინ მისი ზოგიერთი მახასიათებელი შეიძლება იყოს ფერი, ჯიში, სახელი, წონა და ა.შ. და ის მოძრაობს, ყეფს, თამაშობს და ა.შ.
იმის გამო, რომ ის აერთიანებს რეალურ სამყაროს ცნებებს, როგორიცაა ობიექტები, დამალვა, მემკვიდრეობა და ა.შ. პროგრამირებაში, ობიექტზე ორიენტირებული პროგრამირება კარგად არის ცნობილი. იმის გამო, რომ ეს ძალიან ჰგავს რეალურ გარემოებებს, ვიზუალიზაცია გამარტივებულია.
ობიექტზე ორიენტირებული პროგრამირების ცნებები
კლასები და ობიექტები პითონში
ყველა სხვა ობიექტზე ორიენტირებული ენის მსგავსად, პითონი საშუალებას გაძლევთ შექმნათ კლასები ობიექტების გენერირებისთვის. ყველაზე პოპულარული მონაცემთა ტიპები Python-ში, მათ შორის სტრიქონები, სიები, ლექსიკონები და სხვა ობიექტები, არის ჩაშენებული კლასები.
კლასი არის დაკავშირებული მეთოდებისა და მაგალითების ცვლადების ჯგუფი, რომლებიც განსაზღვრავენ გარკვეული სახის ობიექტს. კლასი შეიძლება ჩაითვალოს, როგორც მოდელი ან შაბლონი ობიექტისთვის. ცვლადები, რომლებიც ქმნიან კლასს, ცნობილია როგორც ატრიბუტები.
ობიექტი არის კლასის წევრი, რომელსაც აქვს ატრიბუტების განსაზღვრული ნაკრები. ამის გამო, ნებისმიერი რაოდენობის ობიექტი შეიძლება შეიქმნას იმავე კლასის გამოყენებით.
პითონის კლასები განისაზღვრება სიტყვის კლასის გამოყენებით, რომელსაც მოჰყვება კლასის სახელი და ორწერტილი. თუთიყუშების კლასის ილუსტრაცია შეიძლება იყოს:
აქ ჩვენ ვაცხადებთ ცარიელ კლასს Parrot კლასის საკვანძო სიტყვის გამოყენებით. ჩვენ ვქმნით მაგალითებს კლასებიდან. მაგალითი არის კონკრეტული ობიექტი, რომელიც შეიქმნა გარკვეული კლასისგან. „გასასვლელი“ ხშირად გამოიყენება კოდის დასაყენებლად, რომლის განხორციელებასაც ამ მომენტისთვის შეიძლება უარი თქვან. ჩვენ შეგვიძლია შევასრულოთ პითონის კოდი შეცდომის გამოწვევის გარეშე საკვანძო სიტყვის გამოყენებით "გასვლა".
კლასის ინსტანცია იწვევს ობიექტს (მაგალითს). კლასის შექმნისას მხოლოდ ობიექტის აღწერა განისაზღვრება. შედეგად, მეხსიერება ან ოპერატიული მეხსიერება არ არის გამოყოფილი.
თუთიყუშის კლასის ობიექტის მაგალითია:
Obj არის თუთიყუშის კლასის ობიექტი ამ შემთხვევაში.
ვთქვათ, ჩვენ ვიცით თუთიყუშების სპეციფიკა. ჩვენ ახლა ვაჩვენებთ თუ როგორ შევქმნათ თუთიყუშის კლასი და მისი ობიექტები.
სპეციალური მეთოდი (__init__)
მეთოდი სახელად init განსაზღვრავს ატრიბუტებს, რომლებიც უნდა ჰქონდეს ყველა Parrot ობიექტს (). როდესაც ახალი Parrot ობიექტი იქმნება, ფუნქცია __init__ ქმნის ობიექტის საწყის მდგომარეობას იმ მნიშვნელობების მინიჭებით, რომლებსაც ჩვენ ვაწვდით ობიექტის თვისებებს.
ასე რომ, კლასის ყოველი ახალი ინსტანციის ინიციალიზაცია ხდება __init__() გამოყენებით. მიუხედავად იმისა, რომ __init__() შეუძლია მიიღოს ნებისმიერი რაოდენობის პარამეტრი, თვით ყოველთვის პირველი პარამეტრია.
მინიშნება აქტიური კლასის ინსტანციაზე შედის თვითარგუმენტში. თვით პარამეტრი, რომელიც უკავშირდება კლასის მიმდინარე ობიექტის მისამართს და გვაძლევს წვდომას მისი (ობიექტის) ცვლადების მონაცემებზე, ნიშნავს ამას.
მაგალითი 1
ზემოთ მოცემულ კოდში დავაარსეთ კლასი სახელწოდებით Parrot. შემდეგი, თვისებები განისაზღვრება. ნივთის მახასიათებლები მისი თვისებებია. კლასის __init__ ფუნქცია არის სადაც მითითებულია ეს მახასიათებლები.
როდესაც ობიექტი იქმნება, ინიციალიზაციის მეთოდი არის ის, რომელსაც თავდაპირველად უწოდებენ. შემდეგ იქმნება Parrot კლასის ინსტანციები. ბლეიზი და ვონდა ამ შემთხვევაში არის მინიშნებები (ღირებულებები) ჩვენს ახალ ობიექტებზე. __class .species გვაძლევს წვდომას კლასის ატრიბუტზე.
კლასის ყველა მაგალითს აქვს იგივე მახასიათებლები. მაგალითის მახასიათებლებზე წვდომა ასევე შესაძლებელია blaze.name და blaze.age გამოყენებით. თუმცა, კლასის ყველა ინსტანციას აქვს უნიკალური მაგალითის ატრიბუტები.
მაგალითი 2
მეთოდები
კლასის სხეულის შიგნით განსაზღვრულ ფუნქციებს მეთოდები ეწოდება. ისინი გამოიყენება იმის დასაზუსტებლად, თუ როგორ მოიქცევა ნივთი.
ზემოხსენებულ აპლიკაციაში () განსაზღვრულია ორი მეთოდი, sing() და ცეკვა. იმის გამო, რომ ისინი გამოძახებულია ინსტანციის ობიექტზე, როგორიცაა ალი, მათ მოიხსენიებენ, როგორც ინსტანციის მეთოდებს.
OOPS კონცეფციის საფუძვლები
ობიექტზე ორიენტირებული პროგრამირების ოთხი ძირითადი იდეაა:
- მემკვიდრეობა
- Encapsulation
- პოლიმორფიზმი
- აბსტრაქცია
მემკვიდრეობა
ადამიანები ხშირად ეუბნებიან ახალშობილებს, რომ მათ აქვთ სახის მახასიათებლები, რომლებიც წააგავს მათი მშობლების მახასიათებლებს ან რომ მათ აქვთ მემკვიდრეობით მიღებული მშობლებისგან განსაკუთრებული თვისებები.
შესაძლებელია, რომ თქვენც შენიშნეთ, რომ მშობლებთან რამდენიმე მახასიათებელს იზიარებთ. რეალურ სამყაროში ვითარება საკმაოდ ჰგავს მემკვიდრეობასაც.
თუმცა, ამ შემთხვევაში, „მშობლის კლასების“ მახასიათებლები გადაეცემა „ბავშვთა კლასებს“. ამ ასპექტებს ამ კონტექსტში მოიხსენიებენ, როგორც „თვისებებს“ და „მეთოდებს“.
კლასს შეუძლია მიიღოს თავისი მეთოდები და ატრიბუტები სხვა კლასიდან ტექნიკის გამოყენებით, რომელიც ცნობილია როგორც მემკვიდრეობა. მემკვიდრეობა არის პროცესი, როდესაც ბავშვი იღებს მშობელი კლასის თვისებებს.
მაგალითი:
მშობლის კლასს Human მემკვიდრეობით იღებს ბავშვის კლასის ბიჭი ზემოთ მოცემულ მაგალითში. იმის გამო, რომ Boy იღებს მემკვიდრეობას Human-ისგან, ჩვენ შეგვიძლია წვდომა მის ყველა მეთოდსა და ატრიბუტზე, როდესაც ვქმნით Boy კლასის მაგალითს.
Boy კლასში ასევე განისაზღვრა მეთოდი სახელწოდებით schoolName. მშობელი კლასის ობიექტს არ შეუძლია წვდომა მეთოდზე schoolName. სკოლაName მეთოდის გამოძახება შესაძლებელია ბავშვის კლასის ობიექტის (Boy) შექმნით.
Encapsulation
პროგრამის ყველა ცვლადის გლობალური წვდომის მინიჭება არ არის გონივრული ნაბიჯი კლასებთან მუშაობისას და მგრძნობიარე მონაცემების დამუშავებისას.
პროგრამის რომელიმე ამ ცვლადზე სრული წვდომის გარეშე, ინკაპსულაცია გვაძლევს მექანიზმს, რომ მივიღოთ საჭირო ცვლადები.
მეთოდები, რომლებიც ცალსახად არის განსაზღვრული მიზნისთვის, შეიძლება გამოყენებულ იქნას ცვლადების მონაცემების განახლებისთვის, რედაქტირებისთვის ან წაშლისთვის. პროგრამირების ამ მეთოდს აქვს გაძლიერებული უსაფრთხოება და მონაცემთა შეყვანის კონტროლი.
ნახეთ, რამდენად სწრაფად შეიძლება იყოს ცვლადების წვდომა ქვემოთ მოცემულ დემონსტრაციაში:
პოლიმორფიზმი
დავუშვათ, რომ იყენებთ თქვენს ტელეფონს მის დასათვალიერებლად ინსტაგრამის არხები. როდესაც მუსიკის მოსმენის სურვილი გაგიჩნდათ, შედით Spotify-ში და დაიწყეთ თქვენი საყვარელი სიმღერის დაკვრა.
გარკვეული პერიოდის შემდეგ, თქვენ მიიღეთ ზარი, ასე რომ, თქვენ შეაჩერეთ რასაც აკეთებდით ფონზე, რომ უპასუხოთ. თქვენმა მეგობარმა დაურეკა და მოითხოვა, რომ მისთვის კონკრეტული ადამიანის ტელეფონის ნომრის გაგზავნა.
ასე რომ, თქვენ გაუგზავნეთ მას ტელეფონის ნომერი SMS-ით და განაგრძეთ თქვენი დავალებები. რამე აიღე? მხოლოდ ერთი მოწყობილობით — თქვენი მობილური ტელეფონით — შეგიძლიათ სერფინგით არხებში, მოუსმინოთ მუსიკას, მიიღოთ და განახორციელოთ სატელეფონო ზარები და შეტყობინებები.
აქედან გამომდინარე, პოლიმორფიზმი შედარებულია. პოლი ნიშნავს მრავალრიცხოვანს, მორფი კი სხვადასხვა ფორმებს აღნიშნავს. მაშასადამე, პოლიმორფიზმი მთლიანობაში ეხება რაღაცას სხვადასხვა ფორმით.
ან „რაღაც“, რომელიც, გარემოებიდან გამომდინარე, შეიძლება გამოავლინოს სხვადასხვა ქცევა. OOPS-ში პოლიმორფიზმი აღწერს ფუნქციებს იგივე სახელებით, მაგრამ განსხვავებული ქცევებით. ალტერნატიულად, სხვა ფუნქციის ხელმოწერა იგივე ფუნქციის სახელით (ფუნქციისთვის გადაცემული პარამეტრები).
მაგალითი:
აქ ჩვენ შეგვიძლია გამოვიყენოთ ცვლადი ცხოველი ზებრასა და კურდღლის ობიექტებზე გასამეორებლად, მათი შესაბამისი მაგალითის მეთოდების გამოყენებით. შედეგად, ზებრას და კურდღლის ქცევა (color() & eats()) აქ წარმოდგენილია ერთი ცვლადით, რომელსაც ეწოდება ცხოველი. ამიტომ ის იცავს პოლიმორფიზმის წესებს.
აბსტრაქცია
თქვენ დიდი ალბათობით იყენებთ ლეპტოპს, ტელეფონს ან ტაბლეტს ამ შინაარსის წასაკითხად. მისი კითხვისას თქვენ ასევე, სავარაუდოდ, იღებთ შენიშვნებს, ხაზს უსვამთ ძირითად პასაჟებს და შესაძლოა ინახავთ გარკვეულ ინფორმაციას თქვენს პირად ფაილებში.
ყველაფერი, რასაც კითხულობთ, ხედავთ არის „ეკრანი“ იმ მონაცემებით, რომლებიც ნაჩვენებია თქვენთვის. თქვენ უბრალოდ ხედავთ კლავიატურის კლავიშებს აკრეფისას, ასე რომ თქვენ არ უნდა ინერვიულოთ შიდა დახვეწილობაზე, როგორიცაა კლავიშის დაჭერით ამ სიტყვის ეკრანზე გამოჩენა.
ალტერნატიულად, როგორ შეიძლება თქვენს ეკრანზე ღილაკის დაჭერით ახალი ჩანართის გაშვება.
ამიტომ, რასაც ჩვენ შეგვიძლია დავაკვირდეთ ამ სიტუაციაში, აბსტრაქტულია. ჩვენ შეგვიძლია დავინახოთ მხოლოდ ის შედეგი, რასაც ის ქმნის და არა შინაგანი სირთულეები (რაც ჩვენთვის რეალურად მნიშვნელოვანია).
ამის მსგავსად, აბსტრაქცია მხოლოდ ავლენს ფუნქციებს, რაც ყველაფერს ფლობს და მალავს რაიმე განხორციელებას ან შინაგან დეტალს.
Abstraction-ის მთავარი მიზანია დამალოს ფონური ინფორმაცია და ნებისმიერი გარე მონაცემების განხორციელება, რათა ადამიანებმა დაინახონ მხოლოდ ის, რაც უნდა ნახონ. ეს ხელს უწყობს კოდის სირთულის მართვას.
მაგალითი:
აქ წარმოდგენილია მანქანასთან დაკავშირებული აბსტრაქტული კლასი. რადგან ის მემკვიდრეობით იღებს ABC აბსტრაქტულ კლასს, ის აბსტრაქტულია. იმის გამო, რომ აბსტრაქტული მეთოდები არ არის განსაზღვრული ან ცარიელი რჩება, Vehicle კლასს აქვს აბსტრაქტული მეთოდი, რომელსაც ეწოდება no of wheels, რომელსაც არ აქვს განმარტება.
ისინი იწინასწარმეტყველებენ კლასებს, რომლებიც მემკვიდრეობით იღებენ აბსტრაქტულ კლასებს, რათა უზრუნველყონ მეთოდის განხორციელება.
OOPS კონცეფციების უპირატესობები
- ინკაფსულაციით მიიღწევა მაღალი უსაფრთხოება და მონაცემთა კონფიდენციალურობა.
- მოქნილობა იმავე კლასის მრავალი პოლიმორფული ვერსიის ქონაში.
- კოდის სირთულის მაღალი დონე შემცირდა აბსტრაქციის შედეგად.
- იმის ნაცვლად, რომ გადახედოთ კოდის ასობით ხაზს ერთი პრობლემის დასადგენად, პროგრამირების მოდულურობა გამართვას მარტივს ხდის.
- კოდის ხელახალი გამოყენება გამოწვეულია ბავშვის კლასის მიერ მშობლის კლასის თვისებების მემკვიდრეობით.
- პრობლემის ეფექტური გადაჭრა შესაძლებელია, რადგან ჩვენ ვქმნით კლასებს, რომლებიც აკეთებენ აუცილებელ ქმედებებს თითოეული მინი-პრობლემისთვის. შემდეგი პრობლემა შეიძლება კიდევ უფრო სწრაფად მოგვარდეს, რადგან ჩვენ შეგვიძლია ხელახლა გამოვიყენოთ ეს კლასები.
დასკვნა
დასასრულს, ჩვენ გავიგეთ OOPS იდეების შესახებ Python-ში, ყველაზე ცხელ პროგრამირების პარადიგმაში.
ამის წაკითხვის შემდეგ, თქვენ უნდა გააცნობიეროთ, რომ OOPS პარადიგმა მთლიანად ეხება კლასების და ობიექტების იდეას. და OOPS ცნებები, როგორიცაა ინკაფსულაცია, პოლიმორფიზმი, მემკვიდრეობა და აბსტრაქცია.
დატოვე პასუხი