Энэхүү нийтлэл нь Объект Хандлагат Програмчлал(OOP)-ын ач тус, хэрэглээ, үндсэн дөрвөн ойлголтууд,э тэдгээрийн ажиллах зарчим зэрэг ерөнхий зүйлсийг Python хэл дээр танилцуулах зорилготой.
Ерөнхий ойлголт:#
Хамгийн эхэнд “Объект”, “Хандлагат”, “Програмчлал” гэх энэ гурван үг яг ямар утга илэрхийлдэг талаар авч үзэх хэрэгтэй.
Объект
- Объект нь програм ажиллах үед оролцож буй өгөгдлийн бүтэц, боловсруулалт хийх жижиг модуль зэрэг байж болох бөгөөд өөрийн өгөгдлийг хадгалах хувьсагчид (property), мөн тухайн өгөгдлийг боловсруулж чадах үйлдлүүд (method) гэсэн хоёр төрлийн зүйлсээс бүрддэг.Товчхондоо “Програм ажиллаж байх үед хийж байгаа үйлдлүүд, ашиглаж байгаа өгөгдлийг багцалсан бүтэц бүхий тодорхой хувийн үүрэгтэй элемент” юм. Жишээ нь нэг тоглоом хийж байлаа гэж бодоход тэнд байгаа дүр нь нэг объект болно.
Character.py
class Character:
#Properties
def __init__(self):
self.pos = (0, 0)
self.health = 100
self.damage = 10
self.speed = 50.0
self.fdir = 1
#Methods
def attack(self, enemy: Character):
enemy.health -= self.damage
def move(self):
self.pos = (self.pos[0] + self.speed * self.fdir, self.pos[1])Иймэрхүү байдлаар бичигдэж болно.
Хандлагат
- Хандлагат (Анг: “oriented”) нь ямар нэгэн бодол, үзэл санааны ерөнхий нэг зүйлд чиглэсэн гэсэн утгатай үг. Эерэг хандлагат хүн гэвэл юманд эергээр ханддаг хүн гэж ойлгогдоно. Харин объект хандлагат гэвэл объект гэж авч үзэн, объектоор тухайн зүйлд хандаж харьцах гэсэн санааг илэрхийлнэ.
Програмчлал
- Програмчлал (Анг: “programming”) гэдэг бол програм хангамжийн шийдэл бий болгох (Асуудлыг ойлгох, шийдэл төлөвлөх, програмчлалын хэл дээр код бичих, түүнийг турших, мөн засварлах) бүтэн үйл явцыг хэлдэг.
Дээрх гурван үгнээс нэгтгээд харвал:
Объект үүсгэх, нэг объектоос өөр нэг объектод шилжин тооцоо хийх, олон объектыг нэг зорилгот хэсэгт харьяалуулан хамтад нь нэг объект болгон нэгтгэх зэрэг алхмуудыг хийн програмчлах зарчим нь Объект Хандлагат Програмчлал(OOP) юм.
Түүх#
Ямарваа нэг асуудлыг шийдэхийн тулд Алгоритм хэрэгтэй. Алгоритмаа хэрэгжүүлж шийдлийг гаргаж авахад
- Тодорхой бүтэц бүхий элементүүд
- Зохистой боловсруулалт хийж чадах чанарууд
- Тэдгээрийг зохилдуулан нэгтгэх логик хэрэгтэй.
Товчхондоо алгоритмын хэрэгжилтийг програмчлан бичихэд дээрх зүйлсийг базсан бүтэц хэрэг болсон. Үүний шийдэл болгож програмчлалын парадигм гэдэг ойлголт гарч ирсэн.

Програмчлалын парадигм гэдэг бол програмчлалын үндсэн чиг хандлага, үндсэн зарчим бөгөөд кодыг хэрхэн бүтэцлэж, зохион байгуулахыг тодорхойлогч юм.
Өөр олон төрлийн парадигм хөгжүүлэгдсэн ч энэ сэдвээр гүнзгийрэлгүй яагаад Объект Хандлагат бүтцийг хөгжүүлсэн талаар авч үзье. Хэрвээ энэ талаар илүү сонирхож байвал энэ нийтлэлийг уншихыг санал болгож байна.
Цаг хугацаа өнгөрөхийн хэрээр мэдээллийн технологийн гүйцэтгэх үүрэг, ашиглах хүрээ улам томорсоор улс орон, албан байгуулгаас эхлээд хувь хүн хүртэл хэрэглэгчээ тэлж эхэлсэн. Тийм ч учир бүтээгдэхүүний найдвартай байдал, засварлалтын явц ч ихээр сайжрах, хурдсах хэрэгцээ гарсан.

Энгийн тооцоолол хийх, гарсан мэдээллийг цахим хаягаар илгээх зэрэг агуулгад суурилсан үйлчилгээнээс дэлгүүр, номын сан гэх мэт бодит орчинд өрнөх харилцаанд суурилсан үйлчилгээнд шилжихэд мэдээллийг хадгалах хувьсагчид тэдгээр дээр хийгдэх функцүүд хэтэрхий олон(систем нарийн бүлэглэсэн бүтэцтэй) болж ирсэн.
Тухайн үед процедурт програмчлал голлож байсан ч дээр дурдсан дэлгүүр, номын сан зэрэг нарийн төвөгтэй системүүдийг удирдахад хэцүү болж, кодыг засварлах, өргөжүүлэхэд хэцүү байсан.

Процедур VS Объект:
C програмчлалын хэл процедурт суурилж програмын бүтэц, алгоритмаа зохиож бичдэг. “Процедур” гэдэг нь нэг төрлийн үйлдэл хийдэг кодын нэг блок хэсэг бөгөөд ингэхдээ ихэвчлэн функц эсвэл өөрийгөө дууддаг функц (Рекурс) зэргийг ашиглан тооцоолдог.
Процедураас процедур луу урсан үргэлжилсэн боловсруулалт хийн програмчлах зарчим нь Процедурт Програмчлал юм.

Харин Python гэх мэт хэлүүд Объектод суурилан програмын бүтэц, алгоритмаа зохиодог.

OOP доорх зүйлсийг санал болгон гарч ирсэн.
- Бодит ертөнцийг загварчлах: Объектыг шинж чанар, үйлдэлтэй нь хамт загварчилж, бодит системийг кодод хялбар, ойлгомжтой тусгах
- Дахин ашиглах боломж: Удамшил, олон хэлбэржилтээр кодыг дахин ашиглаж, хугацаа хэмнэж, давхардлыг багасгах.
- Хялбар засвар: Өгөгдөл, кодыг хамгаалж, өөрчлөлтийн эрсдэлийг бууруулах
- Том төслүүдийн удирдлага: Модульчлагдсан загвараар том системийг хувааж, багаар хөгжүүлэхэд тохиромжтой болгох.
- Технологийн хувьсал: GUI, симуляци зэрэг шинэ программд илүү тохиромжтой
Удалгүй энэхүү парадигмд зориулж Simula(1960s), SmallTalk(1970s) гэх мэт дээрх онцлогуудыг програмчлалын хэлний бүтцийн түвшинд тодорхойлон нэвтрүүлсэн тохиолдлууд гарч эдгээр нь C++, Java зэрэг хэлнүүдийн суурийг тавьсан.
Үндсэн ойлголтууд#
Энэ хүртэл объект гэж юу болох, OOP ер нь юу хийж чадах зэргийн талаар тодорхой мэдлэгтэй болсон байх гэж бодож байна. Одоо хэрхэн тэрхүү чанаруудаа кодчиллолын түвшинд хэрэгжүүлдгийг танилцуулъя.
Юуны өмнө Class гэх зүйлийн талаар дурдах хэрэгтэй.
Хариуцах үүрэг, хадгалах өгөгдөл зэргээрээ ялгаатай янз бүрийн object байна. Эдгээрийг үүсгэхийн тулд бидэнд тухайн object-ын хэв (blueprint) хэрэгтэй. Чухам үүнийг л сlass гэх ба үүний дагуу л тухайн object үйлдэл хийж, өгөгдөл хадгална.
- Abstraction
- Бодит ертөнцийн нарийн зүйлийг нууж, зөвхөн шаардлагатай хэсгийг харуулна. Энэ ойлголтод “Яаж хийдэг нь биш юу хийдэг нь гол нь” гэдэг зарчим үйлчилдэг.
class Car:
def move(self):
print("Машин явж байна") # Дотоод ажиллагааг нуусан
my_car = Car()
my_car.move() # Хэрэглэгч зөвхөн "явна" гэдгийг мэднэ2. Удамшил (Inheritance)
- Нэг классын шинж чанарыг өөр класс өвлөж авна.
class Vehicle:
def move(self):
print("Тээврийн хэрэгсэл хөдөлж байна")
class Motorcycle(Vehicle): # Vehicle-ээс өвлөв
def honk(self):
print("Би-би!")
my_bike = Motorcycle()
my_bike.move() # Өвлөгдсөн метод my_bike.honk()3. Битүүмжлэл (Encapsulation)
- Өгөгдлийг хамгаалж, гадаад хандалтыг хязгаарлана.
class BankAccount:
def **init**(self):
self.**balance = 100 # Хувийн (private) хувьсагч
def deposit(self, amount):
self.**balance += amount
print(f"Данс: {self.**balance}")
account = BankAccount()
account.deposit(500) # Зөвшөөрөгдсөн хандалт
print(account.**balance) # Алдаа: Хувийн хувьсагчийг шууд харах боломжгүй4. Polymorphism
- Ижил нэртэй метод өөр өөр объектоор өөрөөр ажиллана.
class Dog:
def sound(self):
print("хав хав!")
class Sheep:
def sound(self):
print("май май!")
def make_sound(animal):
animal.sound() # Объектоос хамаарч өөр дуу гаргана
dog = Dog()
sheep = Sheep()
make_sound(dog) # хав хав!
make_sound(sheep) # май май!Объект хандлагат програмчлал нь програмчлалын загвар бөгөөд объектуудыг ашиглан кодыг зохион байгуулахад төвлөрдөг. Объектууд нь өгөгдөл болон функцүүдийг нэгтгэж, дахин ашиглах боломжийг олгодог. Энэ нь програмчлалын процессийг илүү ойлгомжтой, хялбаршуулдаг.

