ОХП -ын дадлагын ажил 4

Обьект хандалтад программчлалын дадлагын 4-р хичээлээр PHP -н онцгой тохиолдолын боловсруулалтыг өмнөх дадлагын ажлуудад хийгдсэн жишээн дээр хэрэгжүүлэх болно. Иймээс дадлагын ажлыг эхлэхийн өмнө танд Онцгой тохиолдол хичээлийн материалтай танилцахыг зөвлөх байна. Түүнээс гадна өмнөх дадлагын ажлуудыг 1-р ажил, 2-р ажил, 3-р ажил хичээлүүдээс үзэх боломжтой.

Дээрх материалуудтай танилцсан бол шууд даалгавартаа орцгооё.

  1. Users классын конструкторын бүх параметрүүдэд анхдагч утгуудаар ("") хоосон утгыг олгох
  2. Users классын конструкторт шаардлагатай өгөгдлүүдийг шалгах онцгой тохиолдолын боловсруулагчийг оруулах
  3. Онцгой тохиолдолыг баригчийг тодорхойлон хөтөчид алдааны мэдээллийг үзүүлэх
  4. Ямар нэгэн параметргүй Users классын хувийг үүсгэх

Энд өмнөх дадлага дээр боловсруулсан классыг ашиглан түүнд онцгой байдлын боловсруулагчийг нэмэн оруулбал доорх код гарна.

<?php
class Users{
    public $name;
    public $login;
    public $password;
    
    // конструкторыг үүсгэн анхдагч утгуудыг өгөх
    // онцгой тохиолдолыг барих
    function __construct($name="", $login="", $password=""){
        try{
            if($name == "" or $login == "" or $password == "")
                throw new Exception("Өгөгдөл дутуу байна!");
                
            $this->name = $name;
            $this->login = $login;
            $this->password = $password;
        }catch(Exception $e){
            echo $e->getMessage();
        }    
    }

    // clone аргыг үүсгэх
    function __clone(){
        $this->name = "Дулмаа";
        $this->login = "dulam";
        $this->password = "qwert";    
    }
    
    // getInfo() арга
    function getInfo(){
        echo "<p>Name: ".$this->name."<br>";
        echo "Login: ".$this->login."<br>";
        echo "Password: ".$this->password."<br>";
    }
}
// классын хувиудыг үүсгэхдээ конструкторт ямарч өгөгдөл дамжуулахгүй
$user1 = new Users();
// getInfo() аргыг дуудах
$user1->getInfo();

$user2 = new Users("Дорж", "dorj", "321");
// getInfo() аргыг дуудах
$user2->getInfo();

$user3 = new Users("Солонго", "soko", "456");
// getInfo() аргыг дуудах
$user3->getInfo();

//объект $user4 бол $user3 объектын хуулбар
$user4 = clone $user3;
// getInfo() аргыг дуудах
$user4->getInfo();
?>

Кодыг ажлуулбал $user1 хувийг үүсгэх үед "Өгөгдөл дутуу байна!" гэсэн мэдээлэл өгөөд $user1->getInfo() аргыг дуудахад шинжүүд бүгд хоосон утгатай байна. Бусад хувиуд дээр онцгой байдлын боловсруулагч ажиллахгүй тул өмнөх ажлуудынхтай ижил үр дүнг өгнө. Конструкторт шинжүүдэд анхдагч утга өгөх нь функцийн параметрт анхдагч утга өгөхтэй яг ижилхэн. function __construct($name="", $login="", $password="") Үүний дараа бид онцгой тохиолдолыг барих try блокийг эхлүүлсэн байгаа. Энд параметрүүдийн аль нэг нь л хоосон утгатай байвал онцгой байдлын боловсруулагч Exception классын шинэ хувийг үүсгээд түүний конструкторт мэдээллийг параметрээр дамжуулна. Боловсруулагч catch(Exception $e) блокт дамжуулсан мэдээллээ үзүүлнэ. Хэрвээ параметрүүд утгатай байвал онцгой тохиолдолыг баригч ажиллахгүй бүх зүйл хэвийн горимоор ажиллах юм.
Энд бас нэгэн зүйлийг хэлэхэд бид Exception классаас өөрийн классыг өвлүүлэн авч болно. Ингэснээр бид өөрийн онцгой тохиолдолыг боловсруулагчийг бий болгох боломжтой. Үүнийг хэрхэн хэрэгжүүлэхийг жишээгээр үзүүлбэл:

<?php
// Exception классаас өвлөгдсөн nameException классыг үүсгэх
class nameException extends Exception{
    function __construct($message){
        $message= "name " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}
// Exception классаас өвлөгдсөн loginException классыг үүсгэх
class loginException extends Exception{
    function __construct($message){
        $message= "login " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}
// Exception классаас өвлөгдсөн passwordException классыг үүсгэх
class passwordException extends Exception{
    function __construct($message){
        $message= "password " . $message;
        // эцэг классын конструкторыг дуудахгүй бол боловсруулагч ажиллахгүй
        parent::__construct($message);
    }
}

class Users{
    public $name;
    public $login;
    public $password;
    
    // конструкторыг үүсгэн анхдагч утгуудыг өгөх
    // онцгой тохиолдолыг барих
    function __construct($name = "", $login = "", $password = ""){
        // параметр бүрд өөрийн боловсруулагчийг хэрэглэнэ
        try{
            if($name == "")
                throw new nameException("параметрийг оруулна уу!");    
            $this->name = $name;
            
            if($login == "")
                throw new loginException("параметрийг оруулна уу!");
            $this->login = $login;
            
            if($password == "")
                throw new passwordException("параметрийг оруулна уу!");
            $this->password = $password;
            
        }catch(nameException $e){
            echo $e->getMessage();
        }catch(loginException $e){
            echo $e->getMesage();
        }catch(passwordException $e){
            echo $e->getMessage();
        }
    }
    
    // getInfo() арга
    function getInfo(){
        echo "<p>Name: ".$this->name."<br>";
        echo "Login: ".$this->login."<br>";
        echo "Password: ".$this->password."<br>";
    }
}
// классаас $user1 хувийг үүсгэхдээ нууц үгийг дамжуулааагүй тул password параметрийг оруулна уу! гэсэн мэдээлэл өгнө
$user1 = new Users("Бат", "bataa");
// getInfo() аргыг дуудах
$user1->getInfo();

$user2 = new Users("Дорж", "dorj", "321");
// getInfo() аргыг дуудах
$user2->getInfo();

$user3 = new Users("Солонго", "soko", "456");
// getInfo() аргыг дуудах
$user3->getInfo();
?>

try{} catch{} бүтэц бол алдаа боловсруулагч биш гэдгийг сануулъя. Энэ бол онцгой тохиолдолыг баригч юм. Кодод алдаа гарах магадлалыг бууруулах зорилгоор ашигладаг бүтэц. Өөрөөр хэлбэл кодын найдвартай ажиллагааг хангах бүтэц гэж үзэж болно. Бүтцийг яг шаардлагатай гэсэн газраа л ашиглахгүй бол кодын уншихад хүндрэл үүсгэх талтай байдгийг сануулъя.
Обьект хандалтад программчлалыг бодит жишээнд ашиглахыг АУСистем хийцгээе цуврал хичээлүүдээс үзээрэй.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 1121 Төлбөртэй

Энэ хичээлээр манай АУСистемийн сервер талын скриптыг бичих болно. Скрипт манай системийн админ талын функцуудийг агуулсан бөгөөд хэрэглэгч талын программаас арай нарийн төвөгтэй ч index.php файлтай бүтцийн хувьд төстэй. index.php файлын байрлах хавтаст admin.php нэртэй файл үүсгээд доорх кодыг оруулан өгөөрэй.

  Нээгдсэн тоо: 1469 Төлбөртэй

Энэ хичээлээр боловсруулж буй АУСистемийн сервер талын дэлгэцийн формуудыг үүсгэх болно. Ямар ч интернет төсөл хэрэглэгчийн болон серверийн гэсэн хоёр хэсгээс бүрддэг. Энэ зарчим бүхий л программ хангамжид мөрдөгдөх хэрэгтэй. Жишээ нь та дотоод сүлжээний орчинд программ зохиож байлаа гэхэд өгөгдлийн сантай шууд харьцах, хэрэглэгчдийн эрхийг зохицуулах, баазыг архивлах, тодорхой цагаар хийгдэх үйлдлүүдийг гүйцэтгэх зэрэгт системийн админ нэвтрэх эрхтэй тусдаа модул бичих л хэрэгтэй болдог. Ингээд сервер талын темплейтүүдийг зохиож эхэлцгээе.

  Нээгдсэн тоо: 3761 Бүртгүүлэх

Обьект хандалтад программчлалын үндэс болсон класс нь абстракт төрлийнх байж болдог. Хичээлээр абстракт класс ба аргууд гэж юу болох, хэрхэн зарлах, хаана ашиглах талаар үзэх болно. Абстракт класс гэж юу вэ?
Обьектыг шууд үүсгэж болдоггүй классыг абстракт класс гэдэг. Ийм төрлийн классыг үүсгэхдээ abstract гэсэн түлхүүр үгийг ашиглана.
Жишээ нь бидэнд Car гэсэн класс байна гэж үзье. Түүнийг abstract түлхүүр үгийг ашиглан абстракт класс болгоод дараа нь түүнээс обьект үүсгэх гээд үзье.

  Нээгдсэн тоо: 1758 Бүртгүүлэх

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

Нөхцөлт оператор

Нөхцөлт оператор нь тодорхой нөхцлөөс хамаарч програмын ажиллагааны цаашдын үргэлжлэх боломжийг (зам) сонгох хэрэгсэл юм. Жишээ нь бид өдөр бүр цахим шуудангаа шалгахын өмнө хэрэглэгчийн ID, нууц үгээ оруулж өгдөг шүү дээ. Хэрэглэгчийн оруулсан мэдээллийг цахим шуудангийн програм шалгаад хэрвээ мэдээлэл үнэн бол шуудангийн хайрцагт нэвтрүүлж харин мэдээлэл буруу бол дахин оруулахыг шаарддаг. Энэ бол нөхцөлт операторыг ашиглаж байгаа тод жишээ юм.

Математикийн үйлдлүүдэд нэг ба тэг тоонууд онцгой шинжүүдтэй. Үржих үйлдэлд нэг ба тэг

Нээгдсэн тоо : 10

 

Давталт (Iterator) паттерн нийлмэл обьектын бүх элементүүдэд тэдгээрийн дотоод бүтцийг задлахгүйгээр хандах абстракт интерфейсийг тодорхойлдог. C# хэл дээр…

Нээгдсэн тоо : 12

 

Тодорхой нөхцөлд жишээ нь тоог тэгд хуваах гэх мэт тохиолдолд систем өөрөө онцгой нөхцлийн генерацийг хийдэг. Гэхдээ C#

Нээгдсэн тоо : 13

 

Програмийг удирдах цэсийг нээх болон хаах ажиллагааг хариуцах компонентийг боловсруулъя. Үүний тулд төслийн components хавтаст Navigation хавтасыг үүсгээд…

Нээгдсэн тоо : 15

 

Арифметикийн үндсэн 4 үйлдлийн нэг бол үржих. Нэмэх , хасах үйлдлийн талаар…

Нээгдсэн тоо : 13

 

Шаблоны арга (Template Method) хэв дэд классуудад алгоритмын бүтцийг өөрчлөхгүйгээр зарим алхамуудыг дахин тодорхойлох боломж олгосон ерөнхий алгоритмыг…

Нээгдсэн тоо : 17

 

Гурвалжны медиантай холбоотой бодлогууд шалгалт шүүлэгт ихээр орж ирдэг. Иймээс гурвалжны медиан, түүний шинжүүдийг бүрэн мэддэг байх хэрэгтэй.

Нээгдсэн тоо : 23

 

Бүх онцгой нөхцлүүдийн суурь бол Exception төрөл. Төрөлд онцгой нөхцлийн талаарх мэдээллийг авч болох хэдэн шинжийг тодорхойлсон байдаг.…

Нээгдсэн тоо : 22

 

Сорилгын үр дүнгийн QuizResult компонентод сорилгыг дахин эхлүүлэх товч байгаа. react -ийг зохиогчид  програмийг компонент дээр суурилан хийх…

Нээгдсэн тоо : 21

 
Энэ долоо хоногт

илэрхийллийг хялбарчил

Нээгдсэн тоо : 996

 

ABCD трапецийн бага диагонал BD=6 бөгөөд суурьтай перпендикуляр. Трапецийн AD=3, DC=12 бол B, D мохоо өнцгийн нийлбэрийг ол.

Нээгдсэн тоо : 2219

 

Геометрийн шалгалтанд сурагчид шалгалтын асуултуудаас нэг асуулт ирнэ. Сурагч "Дотоод өнцөг" сэдвийн асуултуудад хариулах магадлал 0,35 харин "Багтаасан тойрог" сэдвийн асуултуудад хариулах ммагадлал 0,2 байжээ. Шалгалтын асуултуудад энэ хоёр сэдэвт хоёуланд зэрэг хамаарах асуулт байхгүй бол сурагчид энэ хоёр сэдвийн аль нэгэнд нь хамааралтай асуулт ирэх магадлалыг ол.

Нээгдсэн тоо : 549