Junior
Ինկապսուլյացիան ինչ է օբյեկտային ուղղված ծրագրավորման մեջ?
sobes.tech AI
Պատասխան AI-ից
Ինկապսուլյացիան՝ տվյալների (գծագրերի) և մեթոդների միավորումն է, որոնք աշխատում են այդ տվյալների հետ, միավորելով դրանք մեկ ամբողջության մեջ (օբյեկտ կամ դաս), ինչպես նաև ներքին իրականացման թաքցնումը արտաքին աշխարհից: Սա թույլ է տալիս վերահսկել տվյալների մուտքը և փոփոխել դասի ներքին կառուցվածքը՝ չանդրադառնալով մնացած կոդին:
Ներքին իրականացման հիմնական կողմերը՝
- Տվյալների թաքցում: Օբյեկտի ներսի տվյալներին ուղղակի մուտքը սահմանափակ է: Մուտքը իրականացվում է հանրային (public) մեթոդների՝ getter-ների (տվյալների ստացման համար) և setter-ների (տվյալների փոփոխության համար) միջոցով:
- Ինվարիանտների պահպանություն: Դասի մեթոդները կարող են պարունակել տրամաբանություն տվյալների ճշգրտությունը ստուգելու համար՝ ապահովելով, որ օբյեկտը գտնվում է վավերական վիճակում:
Օրինակ՝
<?php
class User {
private string $name; // Թաքնված հատկություն
private int $age; // Թաքնված հատկություն
public function __construct(string $name, int $age) {
$this->setName($name);
$this->setAge($age);
}
// Getter՝ name-ի համար
public function getName(): string {
return $this->name;
}
// Setter՝ name-ի համար՝ վավերացման հնարավորությամբ
public function setName(string $name): void {
// Անհրաժեշտության դեպքում կարող եք ավելացնել անունի վավերացում
$this->name = $name;
}
// Getter՝ age-ի համար
public function getAge(): int {
return $this->age;
}
// Setter՝ age-ի համար՝ վավերացման հետ
public function setAge(int $age): void {
if ($age < 0) {
throw new InvalidArgumentException("Տարիքը չի կարող լինել բացասական։");
}
$this->age = $age;
}
// մեթոդ, որը օգտագործում է ներքին տվյալները
public function introduce(): string {
return "Իմ անունը " . $this->name . " և ինձ " . $this->age . " տարեկան եմ։";
}
}
// Օգտագործում դասը
$user = new User("Իվան", 30);
echo $user->introduce(); // Արդյունք՝ Իմ անունը Իվան է և ինձ 30 տարեկան եմ։
// Փորձ՝ ուղղակի մուտք գործել private հատկությանը՝ կհանգեցնի սխալի.
// $user->age = -5; // Ֆատալ սխալ՝ Uncaught Error: Cannot access private property User::$age
// Վավերացման հետ setter-ի օգտագործում
try {
$user->setAge(-5);
} catch (InvalidArgumentException $e) {
echo "\nՍխալ: " . $e->getMessage(); // Արդյունք՝ Սխալ: Տարիքը չի կարող լինել բացասական։
}
Ինկապսուլյացիայի առավելությունները՝
- Մուտքի վերահսկում: սահմանում է, թե ինչպես կարող են արտաքին օբյեկտները փոխազդել դասի տվյալների հետ:
- Լկտիություն: թույլ է տալիս փոխել դասի ներքին իրականացումը՝ առանց փոխելու արտաքին կոդը, որը օգտագործում է այն:
- Կոդի պահպանման բարելավում: հեշտացնում է սխալների հայտնաբերումն ու փոփոխությունները, քանի որ փոփոխությունները սահմանափակվում են դասի ներսում:
- Տվյալների պաշտպանություն: կանխում է սխալ փոփոխությունները օբյեկտի վիճակում։