C, PHP, VB, .NET

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


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

* Ламбда изрази

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

Ламбда изразите са функционалност, която е дълго чакана в Java. Появява се с версия Java 8 и е първата крачка към добавяне на… нека не казваме „елементи“, а по-скоро „еквиваленти“ на функционално програмиране в езика. При положение, че един от основните конкуренти на Java – .Net framework – ги поддържа още с версия 3.5 от 2007 г., може да се каже, че от Oracle (Sun) са доста закъснели. Разбира се това си има и причина – до известна степен ламбда изразите нарушават основната философия на абстрактния модел на интерфейсите в Java (за това няма да пишем сега, а в следваща статия по-подробно). Тук ще разгледаме общата философия на ламбда изразите и начина на работа с тях. Прочети още…

.

 


* Задача от контролно 1, вариант 2, 22 ноември 2014 г.

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

Задача 1. Създайте клас за филми (Movie) с член променливи име (name – тип String), времетраене в секунди (length – int) и трейлър (trailer – FileInputStream). Минималният брой на секундите в един филм трябва да e 3600. Създайте само един конструктор – с подадени параметри.

Задача 2. В клас Movie добавете следните методи: Прочети още…

.

 


* Задача от контролно 1, вариант 1, 22 ноември 2014 г.

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

Това е набързо написано (като за контролно :P) примерно решение на задачата от днешната контролна работа. Вероятно може много неща по него да се изгладят. Не е тествано въобще с реални данни – може да не е съвсем коректно. Моля ако някой има време, да го изпробва и да каже ако и къде има проблеми. Изтеглете сорс кода.

Задача 1. Създайте клас за фотоалбум (PhotoAlbum) с член променливи „брой страници“ (pagesCount – тип int) и списък от снимки (масив photos от тип FileInputStream). Максималният брой на снимките в един албум не трябва да превишава pagesCount*3 – това трябва да са границите на масива. Погрижете се новосъздаден фотоалбум да има минимум 10 страници. Освен конструктор с подадени параметри, трябва да създадете и конструктор по подразбиране, в който се създава нов празен албум с 16 страници. Прочети още…

.

 


* Игра на камъчета с трима играчи – сървър и клиент

Публикувано на 26 януари 2014 в раздел ПИК3 Java.

Трябва да се моделира комбинаторната игра камъчета (stones). Играта се играе от трима играчи и се състои в следното: Прочети още…

.

 


* Tic-tac-toe сървър и клиент

Публикувано на 26 януари 2014 в раздел ПИК3 Java.

Трябва да се създаде сървър за игра на “морски шах” (tic-tac-toe). Играта се играе от двама души върху дъска с девет квадратчета. Първият играч отбелязва знак „Х“ в квадратче по негов избор, след което втория отбелязва знак „О“ и така се редуват до изчерпване на квадратчетата. Целта е един от играчите да подреди три от неговите знаци по хоризонтала, вертикала или диагонал. Примерни изходи от играта са следните: Прочети още…

.

 


* Чат сървър и клиент с GUI

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

В това упражнение беше показано как може да се изгради графичен интерфейс за чат клиент приложението от предишното упражнение. Използва се Swing, като се използват различни контроли – JLabel, JTextArea, JScrollPane, JTextField и JButton. Освен допълнителния клас (ClientGUI) има промени по другите два – в ClientThread всички System.out.println са променени така, че да обновяват графичните контроли, а в основния клас Client e премахната функционалността за четене на съобщение от клавиатурата чрез конзолата (тази дейност е прехвърлена към действието на бутона). Промени по сървъра няма и той продължава да си работи в конзолен режим. Демонстрирани са два често използвани Layouts – FlowLayout и BorderLayout – за разполагане на контролите. Не на последно място – използва се Event Dispatch Thread (EDT) чрез SwingUtilities.invokeLater(…), за да се прави синхронизирано обновяване на информацията по графичния интерфейс. Прочети още…

.

 


* Consumer-Producer – двустранна синхронизация с много консуматори и много производители

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

В предишните примери се забеляза нещо много неприятно – кодът се обърква все повече и повече. Причината за това е, че при множество играчи, не само производителя трябва да уведомява консуматора и обратно, а и самите консуматори и самите производители трябва да се синхронизират помежду си. Поради тази причина ще е по-добре ако оптимизираме идеята за централно синхронизиране на всички чрез „чинията“.

В този пример има споделен ресурс – чиния с храна. За нея има ограничение какво количество храна ще поеме – максимум 10 единици (по този начин усложняваме задачата, защото хората трябва да се изчакват!). Кучетата ще нападат чинията в произволен ред. Ако в нея няма храна, кучето се отдръпва, за да даде възможност на човек да добави храна (има continue в цикъла на run метода). Същото вършат и хората – те сготвят храната и гледат купичката. Ако тя е пълна, те се отдръпват и чакат. Поддържат се броячи за броя на активните кучета и активните готвачи. Ако готвачите станат повече от кучетата, някой от готвачите ще спира работата си. Прочети още…

.

 


* Consumer-Producer – едностранна синхронизация с много консуматори и един производител

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

В този пример има споделен ресурс – чиния с храна. За нея няма ограничение какво количество храна ще поеме, затова producer (в случая Human) ще я пълни още и още независимо дали е пълна или празна. Кучетата ще се редят едно след друго и ще чакат да се напълни чинията. Използва се централен mutex, с който кучето заявява пред човека, че търси „събуждане“ (notify). Това се прави, за да се предотврати race condition, в който две кучета са събудени последователно и второто изяжда съдържанието на празна чиния (първото е изяло всичко, а човекът все още не е успял да сготви ново ястие). Освен това чинията вече е направена като обект, за да може да се синхронизира по него. По този начин се избягва race condition, при който човекът сготвя ястия в периода между пълненето на стомаха на кучето и нулирането на съдържанието на чинията. Прочети още…

.

 


* Consumer-Producer – двустранна синхронизация с един консуматор и един производител

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

В този пример има споделен ресурс – чиния с храна. За нея има ограничение какво количество храна ще поеме, затова producer (в случая Human) ще гледа дали в чинията има храна или няма. Ако има, той трябва да изчака кучето да се наяде. Ако няма, той ще сложи сготвеното в купичката. Кучето, което яде от чинията, от своя страна също ще гледа дали в купата има храна или не. Ако има храна, то ще я изяде. Ако няма, то ще изчака човека да го повика. Прочети още…

.

 


* Consumer-Producer – едностранна синхронизация с един консуматор и един производител

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

В този пример има споделен ресурс – чиния с храна. За нея няма ограничение какво количество храна ще поеме, затова producer (в случая Human) ще я пълни независимо дали е пълна или празна. Кучето, което яде от чинията, от своя страна ще гледа дали в купата има храна или не. Ако има храна, то ще я изяде. Ако няма, то ще изчака човека да го повика. Прочети още…

.