Чекор по чекор
Почетни чекори со 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
Објектно оријентирани концепти во Јава - Втор дел
прегледано:  211615
 вкупно гласови:  2
 средна оценка:  5.0
 коментари:  3
Проследување на параметри и враќање на вредности.

Повеќето од методите кои ги прегледавме до сега беа од специјален тип. Еве една таква декларација, односно методата „skiniJabolko“ од класата „Jabolknica“ која ја развивме во првиот дел:







public void skiniJabolko() {
    vkupnoJabolka = vkupnoJabolka – 1;
}

Она што ја прави оваа метода (и другите слични методи кои ги сретнавме) специјална е тоа што не бара никакви влезни параметри, ниту враќа некаков резултат. Но како што ќе видиш во наредните Јава примери повеќето методи (барем поголемиот процент од нив) или враќаат или примаат параметри или и двете наеднаш.

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

public void skiniJabolko(int brojNaJabolka) {
    vkupnoJabolka = vkupnoJabolka – brojNaJabolka;
}

Во оваа нова верзија на методата специфициравме дека методата прима параметар од тип „int“, а вредноста се чива во променливата наречена „brojNaJabolka“. Потоа во блокот на методата истата променлива се користи за да се одземе од вредноста на променливата „vkupnoJabolka“. Сега можеме „да скинеме“ колку што сакаме јаболка од јаболкницата со едноставен повик на методата „skiniJabolko“. Еве неколку примери за повик на методата „skiniJabolko“:

Jabolknica j = new Jabolknica(); // Novo drvo

// Prerpostavka deka se izrasnati nekolku jabolka ;)

j.skiniJabolko(1); // Skinato edno jabolko od jabolknicata
j.skiniJabolko(5); // Skinati pet jabolko od jabolknicata
j.skiniJabolko(0); // Nissto ne pravi

int jabolka = 10;
j.skiniJabolko(jabolka); // Skinati 10 jabolka

j.skiniJabolko(-1); // Kine -1 jabolko??!???

Како што може да се види од последната линија, имаме проблем со методата. Таа како параметар ќе прими било кој број (integer) за да „скине“ толку јаболка и ништо не го запира програмот за да скине негативен број на јаболка. Кога ќе се погледне во методата, последнава линија всушност ќе додаде јаболка на јаболкницата, но тоа нетреба да се дозволи бидејќи такво нешто во реалниот живот непостои ... зајмисли, место да береш јаболка, да ги редиш на јаболкницата, хух. Исто така нема да има логика и да скинете повеќе јаболка одколку што има на јаболкницата! Со моменталниот код можат да се скинат повеќе јаболка одколку што истата „има на гранките“ ... неверувам дека јаболкницата може да даде јаболка кои ги нема.

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

Следнава модифицирана верзија на методата „skiniJabolko“ проверува дали параметарот има негативна вредност и дека вредноста не е поголема од бројот на јаболката на дрвото.

public void skiniJabolko(int brojNaJabolka) {
    if (brojNaJabolka < 0) return; // nemoze da se skine negativen broj na jabolka

    if (brojNaJabolka > vkupnoJabolka) return; // nema dovolno jabolka na drvoto

    vkupnoJabolka = vkupnoJabolka – brojNaJabolka;
}

Наредбата „return“ веднаш го терминира методот, односно излегува од блокот на методот. Се забележува дека операцијата на берење јаболка (намалувањето на променливата „vkupnoJabolka“) ќе се извршиа само ако двата претходни услови (искази) имаат неточен резултат (false). Тоа ни дава сигурност дека ограничувањата ќе се случат пред да се изврши операцијата на берење на јаболката.

Еден проблем сеуште е тука. Како делот од кодот кој ја повикува методата „skiniJabolko“ ќе знае дали берењето на јаболка било успешно или не? Нели, доколку берењето не било успешно поради некое ограничување не би сакал програмата која се извршува да продолжи со извршување како да се набрани јаболката. За да го решиме тоа ќе ја модифицираме уште малку методата „skiniJabolko“, овој пат истата ќе може да враќа вредност.

public boolean skiniJabolko(int brojNaJabolka) {
    if (brojNaJabolka < 0) return false;
    if (brojNaJabolka > vkupnoJabolka) return false;
    vkupnoJabolka = vkupnoJabolka – brojNaJabolka;
    return true;
}

Методите не само што можат да примаат вредности проследени преку влезни параметри при повикот туку тие исто така можат и да пратат вредност назад со специфицирање на вредноста како дел од наредбата „return“. Во последнава верзија од методата зборот „void“ во декларацијата на методата го заменивме со зборот (податочен тип) „boolean“. Тоа кажува дека методата ќе врати Boolean (точно/неточно, односно true/false) вредност кога истата ќе биде терминирана. Во конкретниот случај методата ќе врати вредност „true“ само кога берењето на јаболката ќе биде успешно, а ќе врати „false“ ако неуспее поради некоја причина. Ова ни овозможува да го структуираме програмот кој го повикува методот на следниов начин:

if (!j.skiniJabolko(10)) {
    System.out.println("Greska: Nemozam da naberam 10 jabolka");
    System.exit();
}
jabolkaVoKosnica = jabolkaVoKosnica + 10;

Условот во исказот „if“ ја повикува методата „skiniJabolko“ со параметар чија вредност е 10, а потоа ја проверува вредноста која методата ја враќа за да провери дали е неточна (false, верувам дека веќе го примети операторот „!“). Доколку одговорот е „false“ се испечатува порака со грешка и со повик на методата „System.exit()“ програмот се терминира, што во конкретниов случај е логичен чекор поради некоја неочекувана грешка. Доколку одговорот беше точен (true) програмот ќе продолжеше да се извршува нормално.

Друга честа употреба на повратните вредности од методите е при креирање на методи кои извршуваат некои калкулации и го враќаат резултатот од калкулацијата. Ќе има уште примери од кои ќе можеш да научиш и други начини за употреба на споменатите можности на методите.
страна број: 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.
Сите други трговски марки се сопственост на нивните сопственици.