C, PHP, VB, .NET

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


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

* Изходен код от упражнение 3, 2015

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

Създайте клас Person съдържащ член променливи “name” (String) и “phone” (String). Защитете “name” така, че да не може да бъде променян (да е private и да има само get метод). За “phone” оставете public модификатор за достъп и не правете get и set методи. Реализирайте метод “String toString()”, в който се връща низ със съдържание името и телефона на човека разделени със запетая. Направете само конструктор с подадени параметри. Не пишете конструктор по подразбиране.

Направете клас Teacher, който наследява Person и добавя член променлива: enum Position{PROFFESOR , DOCENT,  ASSISTANT}
Направете два конструктора – един с подадени параметри name, phone и Position, и един с подадени само name и phone, при който Position се приема по подразбиране ASSISTANT

Направете клас “Course” с член променливи Sting name – име на курс – и Teacher tutor. Направете само конструктор с подадени параметри. Не правете get и set методи.

Направете клас “Student” наследяващ “Person” и добавящ следните член променливи: Прочети още…

.

 


* Изходен код от упражнение 2, 2015

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

Да се напише клас с main метод, в който да се демонстрира извеждане на меню в конзолен режим, в което да има следните дейности:

  1. Въвеждане на данни за нов клиент – изисква въвеждането на данни за човека от клавиатурата. За всеки клиент се пази име, ЕГН и адрес. След успешно въвеждане, данните се съхраняват във файл в текущата директория с име <ЕГН>.txt, където <ЕГН> е 10 цифреното число, което е ЕГН на човека;
  2. Търсене на потребител по ЕГН – потребителя въвежда число <EГН> и програмата се опитва да отвори файла <EГН>.txt. Ако такъв съществува, трябва да се изведе информация за човека. В противен случай се извежда съобщение, че такъв човек не съществува;
  3. Търсене на потребител по ключова дума – отваря един по един всички файлове с разширение .txt от текущата директория и ги претърсва за съответната ключова дума;
  4. Изход.

След извършване на дадено действие, програмата трябва да се връща в главното меню (за целта използвайте безкраен цикъл). Изпълнението ѝ продължава до избор на „Изход“. Прочети още…

.

 


* Генерични методи и класове

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

При динамичния полиморфизъм показахме как може един метод да приеме за входен параметър родителски клас или интерфейс и по този начин неговият код да може да обработва всички негови наследници. Например ако ни се налага да напишем метод за сортиране на списък, ние може да му подаден като входен параметър елемент от тип интерфейса List и да работим с него. Впоследствие на този метод можете да подадем ArrayList, LinkedList, Vector и т.н. и метода ще сортира всеки един от тях без да се интересува от техните специфики. Така вместо да напишем различен метод за сортиране за всеки вид списък, пишем само един, който работи успешно с всички видове.

Генеричните типове са продължение на тази идея, което я извежда още по-далеч – вече може да правите методи, които не просто работят с всички еднотипни обекти, а работят с каквито и да е обекти, включително ако между тях няма наследствени връзки. Особено удобни са за „контейнери“ на информация – когато не се интересуваме от действията, които извършва подадения обект, а просто искаме да съхраним неговата информация. Вече сте виждали това при колекциите (Collections) – например ArrayList<String> и ArrayList<Integer> си е все един и същи клас ArrayList, който е генеричен и работи с каквито и да е обекти (типа им указваме чрез ъгловите скоби). Тук първо ще дадем кратки примери, а в края на статията ще покажем един обобщен. Прочети още…

.

 


* Задължителни и незадължителни изключения

Публикувано на 19 юли 2015 в раздел ПИК3 Java.

В статията за изключения дефинирани от потребителя, а и във всички следващи, правихме изключенията като наследници на клас Exception. Това са т.нар. „checked“ изключения. Ще си позволя да използвам термина като „задължителни изключения“, а не да използвам буквалния превод (проверени). Щом едно изключение е задължително, то трябва: Прочети още…

.

 


* Статични методи на клас Stream

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

В тази статия ще разгледаме статичните методи на клас Stream. Ще покажем и два начина за генериране на безкраен поток – чрез Supplier и чрез метод iterate.

Примерите с код, които ще опишем по-долу се надграждат един-друг. В началото трябва да добавите java.util.function.*, java.util.*, java.text.* и java.util.stream.*. Прочети още…

.

 


* Монади с Java 8 Stream

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

Във функционалното програмиране понятието „монада“ означава изчисление, което се провежда в поредица от стъпки. Това може да са вержини операции или поредица от операции създадена чрез генератори на функции (примери и за двете показахме по-рано). В тази статия ще се фокусираме върху едно от сериозните нововъведения в Java 8 – клас Stream, чрез който могат да се реализират монади върху списъци и масиви. Още в началото трябва да се отбележи, че под „Stream“ нямаме предвид познатите InputStream и OutputStream, а един изцяло нов клас, който се помещава в пакета java.util.stream. Прочети още…

.

 


* Генератори на функции (Currying) в Java 8

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

Ако имаме една функция от няколко входни параметри, която като резултат връща друга функция с по-малко параметри, ще казваме, че имаме „генератор на функции“. Терминът на английски се нарича „currying“ и е важен за функционалното програмиране. Нека разгледаме един пример за генератор на функция, който е написан на по-стара версия на Java (<=7). Нарочно няма да използваме функционалните интерфейси, които са налични в Java 8, а ще си дефинираме сами такъв: Прочети още…

.

 


* Затваряния (Closures)

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

Един интересен момент при писането на локални класове е свързан с достъпа до променливи и обекти, които са извън блока дефиниращ локалния клас. Оказва се, че локалните класове (и анонимните в частност) имат достъп до локални променливи и референции към обекти, които са извън техния обхват. Това важи също така и за новия по-модерен вариант с ламбда изрази в Java 8 (те са анонимни класове в крайна сметка). Има обаче едно сериозно ограничение – променливите или референциите трябва да са final. Нека дадем един първи елементарен пример: Прочети още…

.

 


* Вградени функционални интерфейси

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

В Java 8 има една поредица от вградени функционални интерфейси, които имат важна роля при използването на ламбда изрази в библиотечните функции. Използването на тези интерфейси е силно насърчително (вместо създаването на собствени еквивалентни такива). В предишната статия вече говорихме за добре познатите Comparator, ActionListener и Runnable. Сега ще обърнем внимание на някои от новите интерфейси, които идват с Java 8. Прочети още…

.

 


* Методи по подразбиране

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

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

.