OOP Flashcards
Какво са данните? Какво са метаданните? Какво е валидността на данните?
Характериситка/информация (в литерал или променлива) получена от хардуер или софтуер. Стават информация, когато са в контекст.
Метаданните са данни за данните.
Валидността на данните се определя се от софтуера, запазваме ги валидни чрез проверка на софтуера и ограничен достъп до тях. (scope & closure)
Какво е състояние (state) и поведение (behavior)? Защо да ги групираме заедно?
State - данни, които обектът съдържа;
Behavior - методи, които прилагаме;
Улеснява поддръжката на кода, по-структуриран и всичко е на едно място.
Как обектите предоставят структура?
Групират свързаните данни и функции в едно място и гарантират по-организиран код благодарение на класовете (ES6).
Какво значи .this? Как определяме стойността на .this?
Това е placeholder, получава стойност, когато се извика, тя се определя от мястото на извикване.
Стойността зависи от начина на извикване на функцията, не може да се присвоява и може да е различна при всяко извикване. Мястото на извикване се проверява и се определя кое от четирите binding правила се използва.
Кои са четирите binding правила на .this?
Default binding - .this сочи към глобалния обект; ‘use strict’ го прави undefined; използва се, когато никое друго правило не е приложено;
Implicit binding - покрива мнозинството от случаите при работа с .this, ако има нестнати обекти, взима стойноста от последния;
Explicit binding - използват се методи като call(), apply(), bind() за свързване на .this към определен обект.
new Binding - не сега
Каква е последователността на четирите binding правила на .this?
- Explicit - определя дали функцията е извикана с call(), apply() или bind() и .this се свързва с обекта подаден на тази функция.
- Implicit - опредлея дали функцията е извикана с обект и .this се свързва с него.
- Default - прилага се ако другите не са приложени.
Какво е ООП? Какво са класовете?
ООП е модел на програмен език, организиран около обекти, притежаващи данни и методи, предоставящи публичен интерфейс към друг код, който иска да го използва, но поддържат и private състояние.
Класовете са шаблон на обекти, използват state и behavior, дефинират обектите, но инстанциите дефинират състоянието му.
Как се създава клас със специално състояние или поведение?
Изплозваме fields и methods.
Fields - ‘членове’ на класа (променливи, state), могат да има default value;
Methods - изпълняват действие и определят поведение.
Ако са свързани, нека са в един клас.
Какво са инстанциите на класа и как се създават?
Инстанция - обект, който съдържа state & behavior описани от класа.
Можем да ги създаваме с кл. дума ‘new’ и да използваме ‘конструктор’, извикан при създаване на нова инстанция. Те инициализират fields на инстанцията.
Какво са static methods и за какво се използват?
Static - кл. дума, създава статичен метод за класа. Не мога да се извикват върху инстанции, а само върху самия клас. Използват се за фиксирани случаи или данни, които не се нуждаят от дубликат между инстанциите.
Каква е разликата между ООП и ФП?
Функционалното програмиране акцентира върху използването на функции, където всяка една си има собствена задача.
Обектно-ориентираното програмиране акцентира върху обектите и методите в тях, като организива кода в обекти и класове.
Кои са четирите принципа на ООП?
- Encapsulation - капсулира state & behavior в един клас, скрива информация и контролира достъпа до state на обекта.
- Inheritance - позволява на класа да наследява свойства и методи от друг клас (родителски), създава йерархия и позволява преизползване на код.
- Abstraction - фокусира се върхи съществените детайли, като се скриват ненужните сложности. Намалява сложноста.
- Polymorphism - ситуации, в които нещо се проявява в различни форми, позволява третиране на дъщерни класове като родителски.
Какви други принципи познавате в ООП (Кохезия и Къплинг)?
- Кохезия - мярка за сила на свързаност между методи и данни на клас и обединяващата ги концепция.
-силна кохезия - дефинирана абстрактност, класовете имат по една единствена цел;
-слаба кохезия - един клас прави много несвързани задачи; - Къплинг - взаимозависимост между софтуерни модули и тяхната сила.
-слаб къплинг - стремим се към нея, колко тясно е свързан клас с друг клас, да имат малки, директни и видими взаимоотношения помежду си.
Модулите трябва да зависят възможно най-малко един от друг.
! Стремим се към силна кохезия и слаб къплинг.
Защо енкапсулацията е важна в ООП?
Констролиран достъп до state, може да се добави валидация, създава по-стабилни и контолирани класове, намалява зависимостите и улеснява вътрешните промени в класа, без да засяга външен код.
Каква е разликата между private & public fields в класа?
- Public - достъпвани и променяни извън класа и от други чати на програмата.
- Private - не се достъпват и променят директно, за достъпване ползваме getter & setter.
Помага за защита на данни и конторл на достъпа до тях.