Категория ‘ПИК-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 поредни игри: Прочети още…

.



* java.lang.Math

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

Нека разгледаме още един клас с доста статични методи, който се използва сравнително често. Това е класът Math – с него можем да достъпваме голямо количество математически функции. Ето по-голямата част от тях: Прочети още…

.



* Класове и пакети

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

Досега често използвахме понятието „обект“, а на места се споменаваше понятието „клас“. Всъщност в обектно ориентираното програмиране тези две понятия са неразделно свързани. Ще си позволя да направя следните обобщени дефиниции:

(Деф) Клас (class) наричаме понятие

(Деф) Обект наричаме конкретен представител на даден клас

По този начин можем да приемем, че „класовете са шаблони за обекти“. Също използвано определение е, че „класовете описват обектите“. Най-често срещаното в програмирането обаче е, че „класовете са типове за обектите“. Последното прави аналогия с връзката „типове данни“ и „променливи“. Накрая трябва да знаем също, че в Java обектите се създават чрез оператор new и стоят в частта на паметта heap. Техните референции (променливи съдържащи указател към обектите) пък се записват в паметта stack.

Нека вече разгледаме първия пример. Във файл kidsplay.java сме записали: Прочети още…

.



* Регулярни изрази

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

Вече се запознахме с методите indexOf() и lastIndexOf() за String и StringBuffer, чието действие беше да връщат индекс на началото на търсена дума вътре в текст. Чрез допълнителен параметър можеше да се търси второ, трето и т.н. срещане на тази дума. Какво да правим обаче ако ние не знаем точната дума, която търсим? Ако например имаме подаден текст, от който трябва да извадим e-mail адрес, то ние няма как да използваме споменатите два метода, защото ние не знаем самия низ за търсене (нали всъщност го търсим). Именно за такива ситуации се използват регулярните изрази (regular expressions). Прочети още…

.



* Динамични низове (StringBuffer)

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

Недостатъците породени от непроменимост на низовете от тип String, за които споменахме в миналата статия, все пак могат да бъдат преодоляни. За целта съществува обект наречен StringBuffer. Обекти от този тип са вече истински динамични масиви от символи и поради тази причина можем директно да ги променяме без да има нужда от копиране на целия обект в нов буфер.

За добавяне на низ в края на низ създаден със StringBuffer се използва метод append(): Прочети още…

.



* Обект String

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

Досега нееднократно използвахме символни низове. Сега обаче ще се спрем по-подробно на тях. Символните низове (String) съдържат поредица от символи от Unicode таблицата. От самото начало трябва специално да отбележим, че символните низове се записват в паметта heap, т.е. те са обекти (именно затова първата буква на String е главна – това е конвенция за различаване на обекти). Можете да си представите един String като масив от тип char[]. За разлика от масивите обаче, към определен елемент (буква) от String трябва да се обръщаме чрез метод: Прочети още…

.