Modest Programmer logo
17 października 2018
Tagi: JavaScript
Zgodnie z obietnicą, dzisiaj będziemy kontynuować temat związany z programowaniem zorientowanym obiektowo w JavaScipt. Na pierwszy ogień pójdzie enkapsulacja. Enkapsulacja, która inaczej zwana też jest hermetyzacją.

OOP rozwiązuje różne problemy, między innymi tak zwany "spaghetti code" czyli w skrócie mówiąc kod, który jest bardzo skomplikowany i trudny do zrozumienia, który ma różne powiązania w różnych miejscach. OOP rozwiązuje te problemy, ponieważ taki kod jest bardziej uporządkowany. Wszystkie powiązane ze sobą zmienne i funkcje są grupowanego w obiektach. Jak już wcześniej wspominałem zmienne, które występują w obiektach nazywamy właściwościami a funkcje - metodami. Także grupujemy wszystkie właściwości i metody do konkretnego obiektu.

Zobaczmy na kilka przykładów. Załóżmy, że chcemy na podstawie kwoty bazowej, stażu pracy i jakiegoś współczynnika obliczyć premię dla pracownika, nie będziemy się tutaj skupiać na jakichś skomplikowanych algorytmach obliczających premię, bo nie o to chodzi w dzisiejszym temacie. Napiszmy to najłatwiej jak tylko się da.
let baseSalary = 5000;
let yearsWorked = 10;
let ratio = 1.5;

function getBonus(baseSalary, yearsWorked, ratio) {
    return baseSalary + (yearsWorked * ratio);
}
console.log(getBonus(baseSalary, yearsWorked, ratio)); //5015
Powyższy zapis jest podejściem proceduralnym. W takim podejściu istnieje mnóstwo funkcji i zmiennych. Wraz z rosnącym programem, takich funkcji i zmiennych może przybywać, będą one miały zapewne różne zależności, powiązania i powstaje wtedy właśnie wspomniany "spaghetti code". Dlatego nie jest to dobre podejście.

Lepszym rozwiązaniem będzie zastosowanie tytułowej enkapsulacji, poprzez zgrupowanie powiązanych funkcji i zmiennych do konkretnego obiektu.
let employee = {
    baseSalary: 5000,
    yearsWorked: 10,
    ratio: 1.5,
    getBonus: function() {
        return this.baseSalary + (this.yearsWorked * this.ratio);
    }
};
console.log(employee.getBonus()); //5015
Stosując enkapsulację obiekt employee posiada kilka właściwości oraz 1 metodą, nie są one powiązane z żadnymi innymi zmiennymi czy funkcjami, wszystko jest wewnątrz obiektu. Poza tym jak widzisz metoda getBonus nie posiada żadnych parametrów. Uncle Bob byłby z nas dumny :) Bo jak Uncle Bob, czyli Robert C Martin napisał w książce pod tytułem "Czysty kod" (polska edycja) - "im mniej parametrów tym lepiej, a najlepsze funkcje to te bez żadnych parametrów". Dzięki bezparametrowym funkcjom, nasze aplikacje są łatwiejsze w rozszerzaniu. Mając tak zgrupowane właściwości i metody możemy również używać nasze obiekty w innych programach.

To wszystko co chciałem Ci przekazać w tym artykule. Zapraszam Cię do kolejnych artykułów z serii podstaw programowania w języku JavaScript.

Poprzedni artykuł - Programowanie zorientowane obiektowo w JavaScript.
Następny artykuł - Abstrakcja w JavaScript.
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista. Specjalizuje się w C#, głównie WPF, Windows Forms oraz ASP.NET MVC.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2018 modestprogrammer.pl. Wszelkie prawa zastrzeżone Design by Kazimierz Szpin