Чекор по чекор
Почетни чекори со Java
Објектно оријентирани концепти во Јава - Прв дел
Објектно оријентирани концепти во Јава - Втор дел
Објектно оријентирани концепти во Јава - Трет дел
Јава сервлети - Прв дел
Единствен Јава објект (singleton)
Најчести 10 грешки што ги прават Java програмерите
повеќе...
Што е тоа ...
... IDE
... Tomcat
... објект?
... класа?
... наследување?
... интерфејс?
... наследување? (прашања и одговори)
повеќе...
За загревање
Нов проект во Eclipse?
Примитивни податочни типови
Променливи
Оператори
Доделувачки, аритметички и Unary оператори
Оператори за еднаквост, релации и услови
Изрази, искази и блокови
повеќе...
Како да ...
... конвертирам java.sql.Timestamp во java.util.Date
... зададам формат на датум
... ковертирам „long“ во HEX и обратно
... прочитам датотека и променам стринг
... креирам ZIP датотека
... поврзам Apache и Tomcat користејќи mod_jk
... пратам недефиниран број на атрибути до некоја метода
повеќе...
Java преку примери
new Socket(String addr,int port)
new URL(String address)
new URL(String protocol, String host, int port, String file)
CommPort: getInputStream()
CommPortIdentifier: getPortIdentifiers()
Statement: executeQuery(String sql)
Statement: getMaxRows()
повеќе...
Грешка
Нов напис
Рубрика:
Наслов:
  
  

страна број:123
Објектно оријентирани концепти во Јава - Втор дел
Енкапсулација со пристапни методи

Енкапсулација = вклучување на едно нешто во друго за да вклученото не е видливо или во ООД и ООП кратко кажано „не ми кажувај како го правиш, само направи го!“.

Претходно ја модифициравме методата „skiniJabolko“ така да доколку прими поголема вредност од бројот на јаболката во јаболкницата немаше да дозволи промена на променливата „vkupnoJabolka“ бидејќи е нереално истата да влезе во минус.  Но доколку некој од корисниците на нашата класа (некој друг програмер) сака да ја „добие“ таа нереална ситуација многу лесно ќе го стори тоа на следниов начин:

Jabolknica jabDrvo = new Jabolknica();
jabDrvo.vkupnoJabolka = -10;

Тука веќе ни се поставува прашањето, како да го заштитиме објектот од доделување на вредности кои немаат смисла? Решението е да особеностите ги декларираме како „private“ и да дозволиме пристап само од внатрешните методи. Еве една надградена верзија на класата Jabolknica која ја користи оваа техника:

1  package mk.com.java;
2
3  public class Jabolknica extends Drvo{
4    private int vkupnoJabolka = 0;
5
6        public void dodadiJabolko() {
7            vkupnoJabolka = vkupnoJabolka + 1;
8       }
9  
10     public boolean skiniJabolko(int brojNaJabolka) {
11        if (brojNaJabolka < 0) return false;
12        if (brojNaJabolka > vkupnoJabolka) return false;
13        vkupnoJabolka = vkupnoJabolka – brojNaJabolka;
14        return true;
15    }
16  
17    public int getVkupnoJabolka() {
18        return vkupnoJabolka;
19    }
20
21    public boolean setVkupnoJabolka(int brojNaVkupnoJabolka) {
22        if (brojNaVkupnoJabolka < 0) return false;
23        vkupnoJabolka = brojNaVkupnoJabolka;
24        return true;
25    }
26 }

Како што можеш да видиш во линија број 4 сега „vkupnoJabolka“ е декларирана како „private“, што значи дека до истата ќе може да се пристапи само од истата класа. Методите „dodadiJabolko“ и „skiniJabolko“ не се променети, истите имаат пристап до променливата „vkupnoJabolka“ и одлично ќе работат со веќе поставените ограничувања. За да овозможиме на надворешните класи пристап до бројот на јаболка во јаболкницата (променливата „vkupnoJabolka“) ја креиравме методата „getVkupnoJabolka“, која едноставно ја враќа вредноста на променливата. За подесување на вредноста на истата променлива ја креиравме методата „setVkupnoJabolka“ со тоа ограничување на може да се подеси број на јаболка кој е исклучиво поголем или еднаков на нула.

Овие две методи се познати како „пристапни методи“. Односно тие методи ни овозможуваат индиректен пристап до вредностите на променливите кои се декларирани како „private“. Пристапните методи се типични за добро дизајниран објект. Дури и доколку некоја променлива може да чува било каква вредност погрижи се и тие променливи да си добијат свои пристапни методи. Правејќи го тоа му овозможуваш на твојот програм да употребува една важна опција на објектно орјентираното програмирање, а тоа е енкапсулацијата.

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

На пример, доколку сакаш да имаш примерок од секое јаболко од класата „Јabolko“ наместо да користиш целобројна вредност за чување на вкупниот број на јаболка едноставно треба да ги направиш следните промени. Наместо променливата „int vkupnoJabolka“ би ставиле некоја низа која ќе ги чува објкетите од тип „Jabolko“. Исто така методата „getVkupnoJabolka“ ќе го враќа бројот на елементи во низата. Методата „setVkupnoJabolka“ би креирала инстанци од „Jabolko“ и би ги сместувало во низата. Сите овие промени можеме да ги направиме во било кое време, а местата каде што била користена класата и овие две методи нема да има потреба да се менуваат, бидејќни нивните декларации не се променети. Моќно а? ;)

Ај да не се рече не сум дал вежба: Преправи ја класата „Drvo“ така да правилно ја енкапсулира особеноста „visina“.
страна број: 1 2 3 4 << претходна страна :
 
Коментирај
автор: Анонимус
Анонимните коментари ќе бидат објавувани веднаш после нивната проверка.
За да вашиот коментар биде веднаш валиден претходно пријавете се или креирајте свој профил


напишал: Анонимус (02.03.2009 14:12:10)
Idajava za vakov portal vi e super. I moze da se nauci osnovata na java programiranjeto. Od mene edinstvena zabeleska e sto ne postoi forum. Mislam deka bi bilo super da se razmenuvaat znaenja pomegu korisnicite.
напишал: igor (03.04.2009 17:28:18)
Благодарам, што се однесува до форумот, го има ... http://forum.java.com.mk

поздрав
напишал: Анонимус (29.06.2011 16:25:44)
>> Енкапсулација во слободен превод би значело дека внатрешната поставеност (репрезентација) на објектот е одвоена од интерфејсот кој се презенетира кон другите објекти во твојот програм

Одделувањето на интерфејсот од имплементацијата се нарекува implementation hiding (криење на имплементацијата). За таа цел се користат спецификаторите за пристап, private, public, protected (ако не се искористи ниеден од нив, тогаш се работи за package-access). Додека пакувањето на податоците и методите во рамките на класата, во комбинација со implementation hiding, се нарекува енкапсулација (затварање, зачаурување на класата). Резулатот е податочен тип, класа со свои карактеристики и однесувања.
пребарување
најди
 
Форум
 
JugMK
GetJava Download Button
http://www.eclipse.org
 
 
 
 
Copyrights © 2006 - 2024 by Java.com.mk
Права и правила за користење на java.com.mk
Контакт адреса:
contact AT java.com.mk
Powered by Supernova v.0.70 beta
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc.
Сите други трговски марки се сопственост на нивните сопственици.