Категория ‘ПИК3 Java’
* Изподен код от упражнение 7, 2015
Публикувано на 06 ноември 2015 в раздел ПИК3 Java.
Задача 1. Реализирайте клас Author (автор). В него член-променливи са имена (name от тип String), държава (country от тип String) и телефонен номер (phone от тип String). Направете само конструктор с подадени параметри. Променливите name и country направете само за четене, а phone направете така, че да може да се чете и променя. За phone се погрижете да е записан в следния формат: xxx-xxx-xxxx (например 567-123-8888 e валиден телефон). Предвидете допълнителна възможност да бъде въведен телефон и в алтернативни два формата – xxxxxxxxxxx (например 5671238888) или (xxx) xxx-xxxx (например (567) 123-8888). Ако в set метода се подаде телефон в алтернативен формат, вие трябва да го конвертирате до стандартния и да го запишете в него. Прочети още...
* Изходен код от упражнение 6, 2015
Публикувано на 30 октомври 2015 в раздел ПИК3 Java.
Трябва да се напише програма, която решава различни типове математически уравнения. Реализирайте следната йерархия:
Задача 1. Дефинирайте интерфейс Solvable с действия: Прочети още...
* Изходен код от упражнение 4, 2015
Публикувано на 29 октомври 2015 в раздел ПИК3 Java.
Задача 1. Дефинирайте интерфейс “Buyable”, в който дефинирайте действиe “int buy(int quantity)” (купуване на продукт) и действие “String getName()” (взимане на името на продукта).
Задача 2. Дефинирайте клас “Product”, който имплементира интерфейс “Buyable”. Член променливи са:
- id – идентификатор на продукта в склада от тип int;
- name – описание на продукта, записано в String;
- quantity – наличност (бройки) в склада от тип int.
Защитете член променливите по следния начин:
- id трябва да е винаги положително число (строго по-голямо от 0);
- quantity трябва да е винаги по-голямо или равно на 0;
- name да бъде само за четене.
Реализирайте метод buy. Идеята му е по подадено количество стока от даден продукт да връща или “id” на продукта в склада (ще бъде положително число), или -1 (невалидно id) ако такова количество не е налично или ако е подадена невалидна стойност за количество (<=0). Ако покупката е успешна, да намалява стойността на член-променлива quantity с количеството, което е закупено.
Задача 3. Реализирайте клас “BetterProduct”, който наследява клас “Product” и предефинира метод buy по следния начин – вече вместо да връща -1 при неуспех, трябва да хвърля RuntimeException с подходящо съобщение за грешка.
Задача 4. Направете клас с main метод, в който инициализирайте масив с два елемента от тип Buyable. В него запишете един Product и един BetterProduct. Обходете масива с цикъл и отпечатайте имената на продуктите на екрана. Прочети още...
* Изходен код от упражнение 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 метод, в който да се демонстрира извеждане на меню в конзолен режим, в което да има следните дейности:
- Въвеждане на данни за нов клиент – изисква въвеждането на данни за човека от клавиатурата. За всеки клиент се пази име, ЕГН и адрес. След успешно въвеждане, данните се съхраняват във файл в текущата директория с име <ЕГН>.txt, където <ЕГН> е 10 цифреното число, което е ЕГН на човека;
- Търсене на потребител по ЕГН – потребителя въвежда число <EГН> и програмата се опитва да отвори файла <EГН>.txt. Ако такъв съществува, трябва да се изведе информация за човека. В противен случай се извежда съобщение, че такъв човек не съществува;
- Търсене на потребител по ключова дума – отваря един по един всички файлове с разширение .txt от текущата директория и ги претърсва за съответната ключова дума;
- Изход.
След извършване на дадено действие, програмата трябва да се връща в главното меню (за целта използвайте безкраен цикъл). Изпълнението ѝ продължава до избор на „Изход“. Прочети още...
* Генерични методи и класове
Публикувано на 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, а ще си дефинираме сами такъв: Прочети още...