Dobrodošli na naše novo blog izdanje posvećeno najboljim praksama objektno orijentisanog programiranja u JavaScriptu. Kroz ovaj blog, provesti ćemo vas kroz ključne koncepte i tehnike OOP-a u JavaScriptu.
Objektno orijentisano programiranje (OOP) je programski stil baziran na klasama i objektima. Ovaj stil grupiše podatke (svojstva) i metode (akcije) unutar entiteta.
OOP je razvijen kako bi kod postao fleksibilniji i lakši za održavanje.
JavaScript je jezik baziran na prototipima, što znači da podržava i funkcionalno i objektno orijentisano programiranje. Upoznajmo sada najbitnije prakse koje nam pomažu pri kodiranju i boljem razumijevanju JavaScripta.
Razumijevanje objekata
Objekti su temeljni gradivni blokovi u JavaScriptu, i koriste se za skladištenje kolekcija parova ključ-vrijednost. Pogledajmo kako kreirati objekat koristeći sintaksu objektnog doslovnog zapisa:
const car = {
make: "Toyota",
model: "Camry",
year: 2022,
color: "Silver",
};
Drugi način je koristeći new Object() sintaksu:
const car = new Object();
car.make = "Toyota";
car.model: "Camry";
car.year: 2022;
car.color: "Silver";
Objektima koje smo kreirali možemo pristupiti koristeći dot (tačka) notaciju, a kreira se ovako: objectName.keyname.
Primjer za naš slučaj bi mogao biti:
console.log(car..year) // vraća 2022
Pored samog pristupanja, objekte možemo brisati, dodavati new properties i uređivati stare, na način da im pristupimo koristeći pomenutu notaciju, a zatim dodijelimo novu vrijednost.
Jedan primjer dodavanja new property i brisanja istog, navodimo ispod.
car.oilType = "D34";
console.log(car.oilType);
delete car.oilType;
U programiranju, klasa je tip strukture koju definiše programer, a koja se zatim koristi za kreiranje više objekata istog tipa. Kreiranjem jedne klase, možemo dodavati svojstva i metode specifične samo za tako kreiranu klasu. Klase predstavljaju srž objektno orijentisanog programiranja, a u isto vrijeme nam olakšavaju proces kreiranja i razvijanja aplikacija ili projekata.
Sada ćemo primjer koji smo koristili za primjer objekta prevesti u klasu i dodati jednu metodu.
class Car {
constructor(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
this.isRunning = false;
}
start() {
this.isRunning = true;
console.log("The car is now running.");
}
stop() {
this.isRunning = false;
console.log("The car has been stopped.");
}
}
Instancu klase Car kreiramo na naredni način:
var car1 = new Car("Toyota", "Camry", 2022, "Silver");
var car2 = new Car("Honda", "Civic", 2021, "Red");
Razmotrimo sada četiri osnovna koncepta OOP-a : apstrakcija, enkapsulacija, nasljeđivanje i polimorfizam.
Apstrakcija u OOP-u je proces izlaganja samo neophodnih funkcija korisniku, dok se kompleksna unutrašnja logika skriva kako bi se programi olakšali za korištenje i razumijevanje. Na primjer, kada šaljemo poruku putem svog telefona, sve funkcije i logika koja usmjerava poruku ka drugoj osobi su skrivene jer nam nije potrebno znati ih, niti znati kako funkcionišu. Apstrakcija pomaže smanjenju kompleksnosti, povećava upotrebljivost i čini promjene u aplikaciji manje ometajućim.
Inkapsulacija je proces grupisanja srodnog koda u jednu cjelinu. Inkapsulacija onemogućava drugim dijelovima koda da manipulišu ili mijenjaju način rada grupe aplikacije, osim ako eksplicitno ne pristupimo toj jedinici i ne izmijenimo je. Inkapsulacija nam pomaže da smanjimo složenost i povećamo ponovnu upotrebu koda.
Nasljeđivanje u OOP-u smanjuje dupliciranje koda, omogućavajući nam da izgradimo dio aplikacije na drugom dijelu tako što naslijedimo svojstva i metode tog dijela aplikacije. Primjer bi bio da klase poput Auto, Motocikl, Bus mogu imati potrebu za istim metodama i svojstvima.
U programiranju, polimorfizam je termin koji se koristi za opisivanje koda ili programa koji može obraditi mnoge vrste podataka vraćajući odgovor ili rezultat na osnovu datih podataka. Polimorfizam pomaže da eliminišemo kompleksne i nepotrebne "if" i "switch" naredbe, jer mogu postati dugi pri pisanju složenih programa.
Kao primjer enkapsulacije možemo pogledati način na koji pišemo private properties i metode, gdje na taj način ograničavamo ono što korisnik može da vidi i može da mijenja. Dakle, vidimo da koristimo malo neobičnu sintaksu, sa znakom # ispred property.
class Person {
#firstName;
#lastName;
constructor(firstName, lastName) {
this.#firstName = firstName;
this.#lastName = lastName;
}
#getFullName() {
return ${this.#firstName} ${this.#lastName}
;
}
}
Zatim imamo primjer nasljeđivanja koji koristi ključnu riječ extends. Ovdje možemo vidjeti i polimorfizam, jer klasa Employee override-a metodu greet() koja je definisana u klasi Person.
class Employee extends Person {
constructor(firstName, lastName, age, position) {
super(firstName, lastName, age);
this.position = position;
}
greet() {
super.greet();
console.log(`I work as a ${this.position}.`);
}
}
Objektno Orijentisano Programiranje (OOP) predstavlja moćan pristup u razvoju JavaScript aplikacija. Kroz ovaj blog, istražili smo ključne koncepte OOP-a, i uvidjeli kako nam OOP omogućava organizaciju koda u logičke jedinice, olakšava održavanje i proširivanje aplikacija, i omogućava efikasno upravljanje složenim sistemima. Polimorfizam, na primjer, omogućava različitim objektima da se ponašaju na način koji je prirodan za njihov tip, čime se smanjuje potreba za dugim if-else nizovima.
Učenje i primjena OOP-a u JavaScriptu može poboljšati organizaciju vašeg koda, olakšati timsku suradnju i povećati ponovnu upotrebu koda. OOP nije samo programska paradigma, već i alat za rješavanje stvarnih problema na efikasan način.