Категория ‘Java’
* Константи в Java
Публикувано на 15 октомври 2009 от Филип Петров. Записано в Java.
Константите в Java се създават чрез ключова дума „final“. Както е по дефиниция – константите задължително се инициализират и след това не могат да бъдат променяни:
final int x = 5; // x = 6; <<< Не е възможно
В Java обаче е възможно константата само да се декларира и да бъде инициализирана по-късно: Прочети още…
* Garbage Collection и метод finalize()
Публикувано на 15 октомври 2009 от Филип Петров. Записано в Java.
В програмният език C++ съществува понятието „деструктор“ – метод който „почиства“ преди даден обект да бъде унищожен. Такъв метод е често използван там, защото в C++ програмистът сам контролира кога един обект да бъде изтрит (чрез „обратния“ на new оператор delete).
В Java програмистът няма контрол над унищожението на обектите. Цялата тежест над това е прехвърлена върху т.нар. Garbage Collector. Въпреки това има аналогия на „почистващ метод“ (деструктор) – това е метод „finalize()“. Именно той се извиква в момента, в който даден обект е изтрит от Garbage Collector.
За съжаление програмистите, които преминават от C++ към Java ще забележат бързо, че Garbage Collector не се извиква често. При по-малките програми даже е възможно да не бъде извикан въобще. Ето ви един пример: Прочети още…
* Статични вложени член класове
Публикувано на 15 октомври 2009 от Филип Петров. Записано в Java.
Вече се запознахме с не-статични вложени член класове. За дефинирането на понятието „статичен вложен член клас“ е много подходяща аналогията с вече познатите статични методи. Нека си припомним главните характеристики на статичните методи:
- Те са общовалидни за всички инстанции на класа;
- Могат да бъдат извиквани без инстанция;
- Могат да променят и достъпват всички статични полета на класа;
- Не могат да променят или достъпват не-статични полета и методи на класа.
Абсолютно същите принципи са валидни и за статичните класове. Когато един вложен клас е статичен то той:
- Е общовалиден за всички инстанции на външния клас;
- Има достъп само до статичните полета и методи на своя външен клас;
- Може да бъде инициализиран без да е нужна инстанция на външния клас;
- Няма достъп до не-статичните полета и методи на своя външен клас.
Нека дадем един пример за клас, който има два вложени класа – статичен и не-статичен: Прочети още…
* Анонимни класове в Java
Публикувано на 15 октомври 2009 от Филип Петров. Записано в Java.
„Анонимните“ класове са специален вид локални класове. Специалното при тях е, че те нямат специални имена и на тях винаги правим само една инстанция.
Нека вземем за пример изчисляването на дължината на хипутенизата на правоъгълен триъгълник. „Не-анонимно“ би било извикването на програмата:
double a = 3;
double b = 4;
double c = Math.sqrt(a*a + b*b);
System.out.println(c);
Защо обаче трябва да пазим променливата „c“ ако не я използваме повече в програмата след това? Ако тя не ни е нужна, то ние по-често изписваме: Прочети още…
* Локални класове в Java
Публикувано на 14 октомври 2009 от Филип Петров. Записано в Java.
„Локални“ класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове, то се има в предвид клас, който е създаден в тялото на метод. На пръв поглед това е доста странно и нетипично място за дефиниране на клас.
Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с „локални променливи“. Прочети още…
* Под-пакети и не-статични вложени член класове
Публикувано на 14 октомври 2009 от Филип Петров. Записано в Java.
В статията класове и пакети на Java показахме примери за създаване на един пакет и няколко класа вътре в него. Също така по-късно показахме как е възможно едни класове да наследяват други. Що се отнася до пакетите – беше споменато, но не докрай обяснено, че те следват йерархичната структура на директории и под-директории. Сега ще обясним всичко по-подробно, но първо ще се спрем върху няколко основни неща свързани с организацията при изпълнението на програми.
Всяка виртуална машина на Java идва с определен набор (всъщност доста голям) от готови пакети с класове. Такива пакети са java.io (съдържат класове работещи с входно-изходни устройства), java.net (класове свързани с мрежови потоци) и т.н. Забелязвате веднага, че „системните“ за Java класове започват винаги с думата „java“ последвана от точка и конкретизиране на името на друг пакет (io, net, …). Тук вече имаме наличие на йерархия – системния пакет java има свой под-пакет io, който пък притежава клас FileInputStream. За да достигнем до този клас ние указваме пълният път до него – java.io.FileInputStream. Прочети още…
* Капсулация на данни
Публикувано на 11 октомври 2009 от Филип Петров. Записано в Java.
Досега ние неосъзнато сме използвали капсулация на данни в процедурното програмиране. Представете си например функцията „indexOf()“ на клас String. Не са много учениците, пък и специалистите, които са се интересували как точно е реализиран този метод. В общи линии ние се интересуваме какви са входните му параметри и връщаната от него стойност. Самият алгоритъм, който извършва работата остава скрит за вас. Още повече – алгоритъмът може след време да бъде променен (подобрен), но това няма да промени нашите програми и те ще продължат да функционират (вземете например алгоритмите за сортиране на масив – можете да използвате най-различни, които се различават само и единствено по скорост на изпълнение, но резултатът е един и същи). Именно такъв вид капсулация на данни има във всички методи, които сте писали. Прочети още…
* Полиморфизъм
Публикувано на 09 октомври 2009 от Филип Петров. Записано в Java.
Понятието „полиморфизъм“ идва от биологията. То описва „съществуване на морфологично различни индивиди в границите на един вид“ (wikipedia). Това например са пчелите и търтеите в пчелния кошер – те са от един вид, но имат съвсем различни функции. В обектно-ориентираното програмиране под „полиморфизъм“ се разбира същото – различни обекти (индивиди) от един и същи вид (базов клас) извършват различни дейности. Тук се разбира, че индивидите наследяват характерните черти на вида, но променят някои от неговите функционалности.
Досега се запознахме с предефинирането на методи. При тях знаем, че можем да извикваме различни методи с едно и също име. Това се наричаше „предефиниране на метод“: Прочети още…
* Абстрактни класове и интерфейси
Публикувано на 09 октомври 2009 от Филип Петров. Записано в Java.
Абстрактни са тези методи в клас, чиято реализация не е имплементирана. С други думи ние сме декларирали, че такъв метод трябва да има, но той все още не е описан как ще работи. Класове, които съдържат в себе си абстрактни методи наричаме „абстрактни класове“.
В статията за класове и обекти дефинирахме „класовете“ като „понятия“. Когато говорим за „абстрактни класове“, то би трябвало да разбираме „абстрактни понятия“. По-доброто определение за такива класове обаче е „шаблони“. В действителност когато декларираме методи, чиято реализация още не е изпълнена, то ние даваме нещо като шаблон на наследниците на тези класове, който те просто трябва да „попълнят“. Не е възможно да се правят инстанции на абстрактни класове (противоречи и с обикновената логика, защото какво би трябвало да означава „абстрактен реален обект“?). Прочети още…
* Наследяване в Java
Публикувано на 08 октомври 2009 от Филип Петров. Записано в Java.
Както всеки обектно-ориентиран език за програмиране, така и Java позволява наследяване. Това е възможността един клас да наследи цялата функционалност на друг клас и да я разшири. Класът, който е наследяван се нарича „родителски клас“, а класа който наследява се нарича „наследник“. Освен да добавят нова функционалност, наследниците също могат да изменят съществуваща.
Нека вземем един примерен клас за деца с метод, в който децата играят играта „камък – ножица – хартия“. В главната програма ще пуснем децата да изиграят 10 поредни игри: Прочети още…
Страници
Категории
- C/C++ (45)
- DB (36)
- Dogs (49)
- Food (7)
- History (8)
- Java (33)
- Lada (41)
- Math (104)
- Metodos (23)
- NetSec (36)
- Other (76)
- Politics (32)
- Probability (13)
- VC++.Net (1)
- XHTML/JS (25)
Нови
- Един виц за капитализма
- Как да получиш целувка?
- Лека разходка на Витоша
- Роко и Берра на училище
- Газова бутилка под багажника на Лада Нива