C, PHP, VB, .NET

Дневникът на Филип Петров


Категория ‘ПИК3 Java’

* Константи в Java

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

Константите в Java се създават чрез ключова дума "final". Както е по дефиниция - константите задължително се инициализират и след това не могат да бъдат променяни:

   final int x = 5;
   // x = 6; <<< Не е възможно

В Java обаче е възможно константата само да се декларира и да бъде инициализирана по-късно: Прочети още...

.

 


* Garbage Collection

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

В програмният език C++ съществува понятието "деструктор" - метод който "почиства" преди даден обект да бъде унищожен. Такъв метод е често използван там, защото в C++ програмистът сам контролира кога един обект да бъде изтрит (чрез "обратния" на new оператор delete). В Java програмистът няма контрол над унищожението на обектите. Цялата тежест над това е прехвърлена върху т.нар. Garbage Collector.

Добавено през 2023 г.: В по-стари версии на Java (преди JDK 18) имаше аналогия на "почистващ метод" (деструктор) - това е метод "finalize()". Именно той се извикваше в момента, в който даден обект е изтрит от Garbage Collector. Долният код вече не е актуален, но ще го оставя за историческа справка.

Програмистите, които преминават от C++ към Java ще забележат бързо, че Garbage Collector не се извиква често. При по-малките програми даже е възможно да не бъде извикан въобще. Ето ви един пример: Прочети още...

.

 


* Статични вложени член класове

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

Вече се запознахме с не-статични вложени член класове. За дефинирането на понятието "статичен вложен член клас" е много подходяща аналогията с вече познатите статични методи. Нека си припомним главните характеристики на статичните методи:

  1. Те са общовалидни за всички инстанции на класа;
  2. Могат да бъдат извиквани без инстанция;
  3. Могат да променят и достъпват всички статични полета на класа;
  4. Не могат да променят или достъпват не-статични полета и методи на класа.

Абсолютно същите принципи са валидни и за статичните класове. Когато един вложен клас е статичен то той:

  1. Е общовалиден за всички инстанции на външния клас;
  2. Има достъп само до статичните полета и методи на своя външен клас;
  3. Може да бъде инициализиран без да е нужна инстанция на външния клас;
  4. Няма достъп до не-статичните полета и методи на своя външен клас.

Нека дадем един пример за клас, който има два вложени класа - статичен и не-статичен: Прочети още...

.

 


* Анонимни класове в Java

Публикувано на 15 октомври 2009 в раздел ПИК3 Java.

"Анонимните" класове са специален вид локални класове. Специалното при тях е, че те нямат специални имена и на тях винаги правим само една инстанция.

Нека вземем за пример изчисляването на дължината на хипутенизата на правоъгълен триъгълник. "Не-анонимно" би било извикването на програмата:

    double a = 3;
    double b = 4;
    double c = Math.sqrt(a*a + b*b);
    System.out.println(c);

Защо обаче трябва да пазим променливата "c" ако не я използваме повече в програмата след това? Ако тя не ни е нужна, то ние по-често изписваме: Прочети още...

.

 


* Локални класове в Java

Публикувано на 14 октомври 2009 в раздел ПИК3 Java.

"Локални" класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове се има предвид клас, който е създаден в тялото на метод.

Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с "локални променливи". Прочети още...

.

 


* Под-пакети и не-статични вложени член класове

Публикувано на 14 октомври 2009 в раздел ПИК3 Java.

В статията класове и пакети на Java показахме примери за създаване на един пакет и няколко класа вътре в него. Също така по-късно показахме как е възможно едни класове да наследяват други. Що се отнася до пакетите - беше споменато, но не докрай обяснено, че те следват йерархичната структура на директории и под-директории. Сега ще обясним всичко по-подробно, но първо ще се спрем върху няколко основни неща свързани с организацията при изпълнението на програми.

Всяка виртуална машина на Java идва с определен набор (всъщност доста голям) от готови пакети с класове. Такива пакети са java.io (съдържат класове работещи с входно-изходни устройства), java.net (класове свързани с мрежови потоци) и т.н. Забелязвате веднага, че "системните" за Java класове започват винаги с думата "java" последвана от точка и конкретизиране на името на друг пакет (io, net, ...). Тук вече имаме наличие на йерархия - системния пакет java има свой под-пакет io, който пък притежава клас FileInputStream. За да достигнем до този клас ние указваме пълният път до него - java.io.FileInputStream. Прочети още...

.

 


* Капсулация на данни

Публикувано на 11 октомври 2009 в раздел ПИК3 Java.

Досега ние неосъзнато сме използвали капсулация на данни в процедурното програмиране. Представете си например функцията "indexOf()" на клас String. Не са много учениците, пък и специалистите, които са се интересували как точно е реализиран този метод. В общи линии ние се интересуваме какви са входните му параметри и връщаната от него стойност. Самият алгоритъм, който извършва работата остава скрит за вас. Още повече - алгоритъмът може след време да бъде променен (подобрен), но това няма да промени нашите програми и те ще продължат да функционират (вземете например алгоритмите за сортиране на масив - можете да използвате най-различни, които се различават само и единствено по скорост на изпълнение, но резултатът е един и същи). Именно такъв вид капсулация на данни има във всички методи, които сте писали. Прочети още...

.

 


* Полиморфизъм

Публикувано на 09 октомври 2009 в раздел ПИК3 Java.

Понятието "полиморфизъм" идва от биологията. То описва "съществуване на морфологично различни индивиди в границите на един вид" (wikipedia). Това например са пчелите и търтеите в пчелния кошер - те са от един вид, но имат съвсем различни функции. В обектно-ориентираното програмиране под "полиморфизъм" се разбира същото - различни обекти (индивиди) от един и същи вид (базов клас) извършват различни дейности. Тук се разбира, че индивидите наследяват характерните черти на вида, но променят някои от неговите функционалности. Ще казваме, че има полиморфизъм тогава, когато обекти от един и същи тип имат различна реализация на действия, свързани с този тип.

Досега се запознахме с  предефинирането на методи. При тях знаем, че можем да извикваме различни методи с едно и също име. Това се наричаше "предефиниране на метод": Прочети още...

.

 


* Абстрактни класове и интерфейси

Публикувано на 09 октомври 2009 в раздел ПИК3 Java.

Абстрактни са тези методи в клас, чиято реализация не е имплементирана. С други думи ние сме декларирали, че такъв метод трябва да има, но той все още не е описан как ще работи. Класове, които съдържат в себе си абстрактни методи наричаме "абстрактни класове".

В статията за класове и обекти дефинирахме "класовете" като "понятия". Когато говорим за "абстрактни класове", то би трябвало да разбираме "абстрактни понятия". По-доброто определение за такива класове обаче е "шаблони". В действителност когато декларираме методи, чиято реализация още не е изпълнена, ние даваме нещо като шаблон на наследниците на тези класове, който те просто трябва да "попълнят". Не е възможно да се правят инстанции на абстрактни класове (противоречи и с обикновената логика, защото какво би трябвало да означава "абстрактен реален обект"?). Прочети още...

.

 


* Наследяване в Java

Публикувано на 08 октомври 2009 в раздел ПИК3 Java.

Както всеки обектно-ориентиран език за програмиране, така и Java позволява наследяване. Това е възможността един клас да наследи цялата функционалност на друг клас и да я разшири. Класът, който е наследяван се нарича "родителски клас", а класа който наследява се нарича "наследник". Освен да добавят нова функционалност, наследниците също могат да изменят съществуваща.

Нека вземем един примерен клас за деца с метод, в който децата играят играта "камък - ножица - хартия". В главната програма ще пуснем децата да изиграят 10 поредни игри: Прочети още...

.