Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ES6
Code

Објектно-ориентирано програмирање со JavaScript

by
Length:MediumLanguages:

Macedonian (Македонски јазик) translation by Marija Poposka (you can also view the original English article)

Final product image
What You'll Be Creating

Дали сте запознаени со поимот ,,шпагети код“? Ова е метафора што може да ја слушнете од програмерите кои не се вклучени во JavaScript, во критиката на јазикот. Тоа е код без структура. Ќе се состои од наредби линија по линија. Некои може да бидат собрани во функции, а некои воопшто да не бидат. И ако имате среќа, сите 9000 линии код ќе бидат во една датотека. Оваа ,,шпагети“ структура веројатно е резултат на процедурално програмирање.

Во процедуралното програмирање функциите се користат за извршување на задачи. Ни требаат функции, но исто така ни треба и дизајн со кој што можеме да работиме. И додека шпагетите се одлични за вечера, тие не се за код. Противотровот е објектно-ориентираното програмирање. За да го разберете објектно-ориентираното програмирање, ќе ги покриеме темите за дизајнирање на програма, дефинирање на класи, и создавање објекти.

Дизајнирање програма

Ајде да замислиме дека ви е доделена задача да направите апликација за книжарница. Само за забава, да ја наречеме нашата книжарница ,,Amazonia“. Amazonia ќе има книги. Ќе има рецензии на книги. И ние ќе сакаме да гледаме книги по автор. Ќе има повеќе функции што ќе сакаме да ги примениме во нашата апликација, но за сега ова е доволно.

Објектно-ориентираното програмирање е фокусирано на создавање објекти. Па како да ги преведеме овие барања во објекти? Една техника е да се направи листа на именките од нашиот опис, а потоа да се прочисти листата на оние кои се релевантни за проблемот. Во нашиот проблем ги споменавме следниве именки:

  • Апликација
  • Книжарница
  • Книги
  • Рецензии
  • Автор

Апликација е ирелевантна именка, па затоа може да биде отфрлена. Исто така може да се ослободиме и од книжарница бидејќи е слично со апликација. Ако требаше да направиме нешто со повеќе книжарници, тогаш би можеле да ја задржиме. Останавме со книги, рецензии, и автори. (Автори е во множина бидејќи во оваа апликација ќе имаме повеќе автори.)

Сега ајде да погледнеме како ќе ја дизајнираме секоја класа. Класата е шема за создавање објекти. Класата на книги што ја создаваме ќе ни даде шема за креирање на објекти за книги.

Тоа е слично како кога архитектите користат нацрт за создавање куќи. Нацртот ќе ви ги покаже спалните соби, бањите, кујната, и дневната соба. Многу куќи можат да се изградат од овој нацрт. Меѓутоа, сите тие не мора да бидат исти. Секоја куќа може да се прилагоди со менување на бојата, подот, или опремата, на пример.

Задача

Напишете ги класите кои би ги користеле за програмата на кошничката. Кошничката треба да биде способна да го прави следново:

  1. Да држи листа на предмети.
  2. Да додава и отстранува предмети од кошничката.
  3. Да го пресметува вкупниот износ од кошничката.
  4. Да им дава информација на купувачите.
  5. Да создава потврда за набавката.

Класи

За да ја дизајнираме нашата класа на книги, треба да размислиме што знае класата и за што ќе биде таа одговорна. За книга, треба да го знаеме насловот, авторот и Меѓународниот стандарден книжен број. Ова се нашите податочни атрибути.

Некои работи што класата треба да биде способна да ги направи се: да ги добие и постави насловот, авторот и Меѓународниот стандарден книжен број. Овие ќе бидат методите на класата. Еве како треба да изледа класата на книги со оглед на нашите барања:

По договор, името на класата е со голема буква. Конструкторот е специјална функција која ги прогласува и иницијализира податочните атрибути. Во внатрешноста на функцијата на конструкторот, атрибутите се додаваат со this клучен збор. Следно, сите методи на класата се наведени без никакви сепаратори.

Методите кои започнуваат со get се познати како методи за пристап бидејќи тие враќаат вредност. Методите кои започнуваат со set се методи за мутација бидејќи тие складираат вредност или ја менуваат вредноста на атрибутот.

Ова е општата форма за дефинирање на класа:

Исто така, класата може да биде прогласена со користење на оваа синтакса:

Класите исто така може да имаат статични методи. Статичен метод е метод кој е сопственост на класата, а не објектот. Да кажеме дека сакаме да создадеме статичен метод за нашата класа на книги за генерирање нумерации. Ова е синтаксата:

Да се повикаме на методот:

Природно прашање би било кога и зошто би користеле статичен метод? Не можам да кажам дека знам добра причина за да се користи статичкиот метод. Тоа зависи од тоа како ќе ја дизајнирате вашата класа. Статичниот метод може да се користи како метод помошник за вашите објекти, но потоа таквите функции можат да бидат зачувани во нивната сопствена класа. Ако знаете добар пример за употреба, оставете го вашето мислење во коментарите.

Конечно, за организација, треба да зачувате класа како модул. Модулот е датотека која го содржи вашиот код. За да ја направиме нашата класа за книги во модул, додаваме export наредба пред неа.

За да ја користиме класата за книги во друга датотека, ја внесуваме.

Онаму каде {} ги содржи вредностите што биле внесени од модулот, и from Book е референца на датотеката Book.js.

Задача

Дефинирајте класа за Автори и Рецензии.

Објекти

Класата самата по себе за нас е бескорисна освен ако не направиме нешто со неа. Сакаме да создадеме книги. За да го сториме тоа, треба да ја инстанцираме класата. Инстанцирањето е технички поим за создавање нови објекти. Објектот што е создаден од класата го нарекуваме пример. Еве како би создале нов пример за книга.

Објектите мора да се инстанцирани со операторот new. Податоците што се пренесуваат во објектот се параметрите што ги дефиниравме во нашиот конструктор. Ова е основната форма за инстанцирање класа:

Да речеме дека сакаме да додадеме атрибути на нашата класа за книги како документ, цена, и број на залиха. Сега имаме шест параметри во нашиот конструктор, и тоа не е убаво. Не само што е лошо кога ќе го погледнеме. Тоа создава дополнителни напори за програмерите кои ја користат класата, бидејќи треба да го знаат редоследот на аргументите. Подобро решение е да помине предметот како аргумент. Пример:

Да го инстанцираме објектот:

Во нашиот пример можевме да му пристапиме на насловот со наредбата book.title бидејќи сите атрибути во класата се јавни. Сега можеби се прашувате зошто ги создадов сите овие методи кога директно можеме да им пристапиме на атрибутите. Дали тоа беше само за да ви ја покажам синтаксата? Да. Исто така, сакам да ви ги покажам придобивките од организирање на вашиот код на овој начин.

Поврзувачкиот код во објектот е познат како енкапсулација. Една од придобивките од енкапсулација е криењето на податоци. Криењето на податоците значи дека атрибутите на објектот не можат да се пристапат надвор од класата.

Во други јазици како Java и Python може да имаме приватни атрибути и приватни методи. Бидејќи стандардно сите наши податоци во класата JavaScript се јавни, не можеме да ја користиме оваа функција. Сепак, треба да пристапиме до нашите податоци со гетери и сетери. Еден договор е да префиксира атрибут со подвлекување _ за да се сигнализира дека е приватен.

Задача

Креирајте објект на книга кој користи објект на автор за да го поставите атрибутот на авторот.

Конечни мислења

Научивме дека класата е нацрт за создавање објекти, и објектот е пример на класата. Придобивката од создавање софтвер во објекти е тоа што дава структура на програмата и ја прави поуправлива.

Кога имаме голема програма, раскинувањето на објектите им дозволува на деловите да бидат развиени и одржани независно од другите делови. Со ова модуларноста станува повторно употреблива. Бидејќи нашиот код е енкапсулиран, објектите може да се користат одново и одново во другите делови на програмата. Плус имаме единица код којшто може да се тестира. Колку подобро е тестиран кодот, толку е побезбеден од грешки.

Понатамошно читање

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.