C, PHP, VB, .NET

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


Архив за октомври, 2009

* Локални класове в 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.

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

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

.

 


* Хората и мухата

Публикувано на 09 октомври 2009 в раздел Математика.

Двама души стояли на разстояние 100 метра един от друг. В един момент тръгнали да вървят един срещу друг праволинейно с една и съща равномерна скорост – 3,6 км/ч. Една муха била кацнала на главата на единия човек и в момента на потеглянето отлетяла по посока на другия човек също праволинейно (странна муха) и равномерно със скорост 7,2 км/ч. Тя достигнала другия човек, стъпила на главата му и отново отлетяла наобратно със същата скорост към първия. Това се повтаряло дотогава, докогато хората стигнали един до друг и се разминали. Прочети още…

.

 


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

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

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

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

.

 


* java.lang.Math

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

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

.

 


* Задача за 16-те точки

Публикувано на 04 октомври 2009 в раздел Математика.

Помните ли задачата за 9-те точки? Ето ви същата задача, но направена с 16 точки:

 
. . . .

. . . .

. . . .

. . . .
 

Свържете всички точки с шест прави отсечки без да си вдигате ръката и без да повтаряте. Предполагам, че този път няма да има проблем да се справите, но на тези, които не са решавали задачата с 9-те точки, препоръчвам да потърсят решението сами преди да гледат отговорите в предишната задача. Прочети още…

.

 


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

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

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

(Деф) Клас (class) наричаме набор от ограничения за достъп и описания на възможни действия, които могат да се извършват върху дефинирани променливи

(Деф) Обект наричаме практически представител на даден клас, в който са „попълнени“ конкретни данни в дефинираните променливи и така вече е възможно да бъдат извършвани конкретните действия

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

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

.