# რა არის აბსტრაქცია

პროგრამის შექმნისას ზოგჯერ გაცილებით მარტივია რომ <mark style="color:green;">იმპლემენტაცია და ინტერფეისი განაცალკევო ერთმანეთისგან</mark> და <mark style="color:green;">მთელი ყურადღება გაამახვილო ინტერფეისზე</mark>. ეს პროგრამის "შავ ყუთად განხილვას გავს" სადაც ჩვენ იმპლემენტაციის დეტალები ანუ ნაბიჯ-ნაბიჯ როგორ შერსულდეს პროგრამა) არ გვაინტერესებს და ჩვენი მთავარი მიზანია ფუნქციონალის განსაზღვრა.\


![](https://392590438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrgmjFj4NNSsoaQmAk09Z%2Fuploads%2FAYnZUyMQOLiMsHcb51TN%2Finheritance.png?alt=media\&token=de3fc1c3-7f4e-46b2-8ee5-0c0148c47d8d)

\
OOP-ში ამ პროცესს აბსტრაქციას ჰქვია. ამ მიდგომას ჩვენ php-ში <mark style="color:green;">აბსტრაქტული კლასებისა</mark> და <mark style="color:green;">ინტერფეისების</mark> გამოყენებით ვასრულებთ. ამ მიდგომით ხელმძღვანელობისას ჩვენ განვსაზღვრავთ თუ რა ფუნქციონალი უნდა ჰქონდეთ კლასებს მაგრამ ჩვენ არ გვაინტერესებს ეს ფუნქციონალი როგორ უნდა განახორციელონ.\
\
აბსტრაქციის ერთ-ერთი ძირითადი უპირატესობა მდგომარეობს იმაში რომ <mark style="color:green;">აბსტრაქციით ხელს ვუწყობთ კოდში განხორციელებული ცვლილებების გავლენის იზოლირებას</mark>. ანუ კლასში რომ სამომავლოდ შეიცვალოს იმპლემენტაციის რიაიმე დეტალი მხოლოდ კლასის შიგნით ექნება მას გავლენა და არანაირ გავლენას არ იქონიებს კლასს გარეთ.&#x20;

### :thumbsup: უპირატესობები

* <mark style="color:orange;">**განხორციელებული ცვლილებების გავლენის იზოლირება**</mark>\
  ცვლილებების გავლენა იზოლირებულია კლასების დონეზე\

* <mark style="color:orange;">**მარტივად აღსაქმელობა**</mark>\
  მარტივი აღსაქმელია კლასი რომელიც ინტერფეისს განავრცობს, რადგან თუ ინტერფეისს გაეცნობი უკვე ყველაფერი იცი ამ კლასის შესაძლებლობების შესახებ.\

* <mark style="color:orange;">**დაგეგმვის სიმარტივე**</mark>\
  ფუნქციონალის იმპლემენტაციისაგან დამოუკიდებლად განსაზღვრა მარტივია, და როდესაც უკვე განსაზღვრული გაქვს ფუნქციონალი იმპლემენტაციის პროცესიც მარტივდება.\
