Функционалност и употреба на вметнување на зависности (Dependency Injection) во Java

Size: px
Start display at page:

Download "Функционалност и употреба на вметнување на зависности (Dependency Injection) во Java"

Transcription

1 Универзитет Св. Климент Охридски - Битола ТЕХНИЧКИ ФАКУЛТЕТ - БИТОЛА -магистерска работа - Функционалност и употреба на вметнување на зависности (Dependency Injection) во Java Ментор: Илија Јолевски Кандидат: Ивана Јованова 67/10 Поднесена на: Битола, 2016

2 Прилог: изјава за оригиналност Јас Ивана Јованова студент на втор циклус студии организирани на Технички факултет Битола во состав на Универзитетот Св. Климент Охридски во Битола, на студиската програма по Информатика и компјутерска техника со место на живеење на ул. Оливер Китановски, бр. 22, со ЕМБГ и број на индекс 67/10 изјавувам дека поднесениот магистерски труд под наслов Функционалност и употреба на вметнување на зависности (Dependency Injection) во Java претставува мој самостоен труд и истиот претставува резултат на самостојна научна работа спроведена во текот на истражувањето. Согласна сум да ги сносам сите обврски и одговорности кои произлегуваат од неовластено користење на туѓ текст или плагијаторство согласно важечките законски и подзаконски акти кои ги регулираат авторските сродни права. Давател на изјавата Ивана Јованова

3 Содржина Содржина: 1. Вовед 1.2 Цели на магистерскиот труд 1.3 Содржина на магистерскиот труд 2. Прв дел - ( Јава платформа, Enterprise Edition ) 2.1 Платформи на Јава програмскиот јазик 2.2 Јава ЕЕ клиенти 2.3 Предности за користење на Java технологија 3. Втор дел - Зошто е постои Dependency Injection? 3.1 Вметнување на зависнот 3.2 Форма на вметнување на зависност 3.3 Кога треба да користиме вметнување на зависност 3.4 Кога не треба да ја користиме вметнување на зависност 3.5 Зошто да користиме вметнување на зависност? Приказ со пример 3.6 Вовед во Spring Framework Преглед на Spring Framework Бенефити од користење на Spring Framework Архитектура на Spring рамка 4. Трет дел - Вовед во MVC аплицкации и NetBeans платформа 4.1 Архитектура на MVC 4.2 Комуникација со MVC тријадата 4.3 MVC апликацијата во spring платформата Ивана Јованова 1

4 4.3.1 Преглед на Spring со MVC 4.4 Вовед во NetBeans платформа 4.5 Вовед во Hibernate платформа Предности од користење на оваа технологија 5. Четврт дел - Предностите од користење на вметнување на зависности 6. Петти дел Направена е функција со контрукотр метод за внесување на зависности. 7. Шести дел - Примена на вметнувањето на зависности (Dependency Injection) во секојдневниот живот со соодветен пример 8. Седми дел Употреба на готов Dependency Injection во апликација 9. Осми дел - Статистики од искусни програмери за користење на Dependency Injection во реалниот живот 9.1 Каде треба да употребам вметнување на зависност? 9.2 Каде не треба да употребам вметнување на зависност? 10. Заклучок Резиме зошто вметнувањето на зависности и добра практика и голем бенефит за секој програмер 11. Преглед на користена литература Ивана Јованова 2

5 1.Вовед Организациите денес се соочуваат со разни предизвиците на новото се подинамично време. Време каде технологиите се користат за остварување на целите за работење на компанијата и остварување на нејзините бизнис цели. Технологиите постојано се менуваат и подобруваат, а информациите со кои располагаат организациите растат се повеќе и повеќе со текот на работењето на компанијата. Информации кои доколку не знаат да се организираат и контролираат, ќе предизвикаат хаос наместо подобро работење на таа компанија. Организацијата мора да е во тек и соодветно да се справи со сите овие предизвици, односно да ги идентификува, прифати, следи, контролира и процени со цел да остане добро организирана без поголеми прекини во работењето, а со тоа и подобро бизнис работење кое е корисно како за крајниот корисник на услугата на компанијата, така и за самата компанија која не смее да си дозволи поголем прекин во нејзиното работење. Повеќето организации својот бизнис го остваруваат, водат и мониторираат преку напредните Информациони Технологии (ИТ) кои многу ги олеснуваат процесите во организацијата, област без која веќе ниедна компанија не може да работи и просперира во ова брзо и динамично време. Очигледна е се поголемата присутност на ИТ и достигнувањата во таа област, целата таа поврзаност со внатрешните процеси во една компанија и поврзаноста со надворешниот свет со организации со различни дејности преку воспоставени ИТ единици во организационата структура. Со целиот тој товар кој го носи ИТ, погрешно е менаџментот да ја игнорира неговата важност и да дозволи неефeктивен ИТ менаџмент. Многу организации чиј бизнис е помогнат од ИТ, се заснова на обработка и чување на големи количества електронски податоци низ ИТ системите, собрани за успешно внатрешно работење на компанијата и секако за бизнис целите на таа компанија. Организациите интензивно работат на имплементирање на разни меѓународни стандарди во работењето, преку кои се врши мониторинг и проценка на поставените контролни точки во процесите, вклучително и мерење на бизнис перформансите, давајќи препораки и насоки со цел намалување на прекините на работењето на таа компанија. Имајќи ги во предвид зависноста на бизнисот од ИТ, фактот што самите ИТ системи и процеси имплементирани во организациите се сложени и специфични по природа, од една страна и различноста на ризиците врз организацијата од друга страна, очигледен е комплексниот избор на изнаоѓање најсоодветен модел за мониторинг и проценка на процесите кој една организација треба да го имплементира. При изборот на моделот треба да се земат во предвид погорните критериуми дополнети со специфичната дејност на организацијата и одлуките на менаџментот стратешки донесени околу важните аспекти на нивната организација. За добра организација во една компанија, и добар бизнис план потребно е добро систем, добар софтвер со кој ќе може да се контролира цело работење во самата организација. Ивана Јованова 3

6 Секојдневно се зголемува потребата од интернет решенија кој функционираат 24 часа во денот, 7 дена во седмицата, овозможуваат работа со повеќе странски јазици, валути, временски зони, стандарди и.т.н. Ваквите системи треба да бидат интенационализирани, да овозможуваат нивно користење преку различни нивоа на пристапување, различни оперативни системи и различни графички кориснички интефрејси. Притоа системите треба да помагаат при намалување на трошоците, зголемување на брзината на извршување на сервисите, безбедно меморирање на голем број на податоци и сл. Со купување, креирање на ваков софтвер ќе се подобри целиот бизнис и финанскики план во организацијата каде што ќе биде употребен. За да се направи добар софтвер потребно е добра платформа и добро организирани искусни програмери. Самите програмери го одбираат јазикот, платформата каде ќе ја искреираат апликацијата која ќе се примени и употреби во секоја добра организација. За подобро организирање на својата програмерска работа и за олеснување на креирање и имплементирање на софтверот, програмерите се повеќе имаат потреба за дистрибуирани, трансакционални и преносливи апликации кои се подобри во брзината, безбедноста и сигурноста од страна на серверските технологии. Во светот на информатичката технологија, претпријатиските апликации мора да бидат проектирани, развиени и произведени за помалку пари, во пократок временски период и со помалку ресурси. Според моето истражување во поглед на креирање на добар софтвер, поткрепен со стабилна платформа и лесно изготвување на софтверот, доста продуктивен и користен од голем број на искусни програмери е Јава програмерски јазик. Затоа е избран како тема во мојот магистерски труд. Со платформата Јава, Enterprise Edition (Јава ЕЕ), развојот на Java апликациите никогаш не било полесен и побрз. Главната цел на Јава ЕЕ платформа е да им обезбеди на програмерите моќна апликација со програмски интерфејс (API), додека од друга страна го намалува времето и комплексноста за развој на апликации и ја подобрува примената на перформансите. Јава ЕЕ платформа е дизајнирана да им помогне на програмерите да се создаде голема многоетапна (мулти-нивоа), скалабилни сигурна и безбедна мрежа на апликации. Име за такви апликации се претпријатиските апликации, бидејќи тие се развиени за да се решат проблемите со кои се соочуваат големите претпријатија кој користат голем број на софтверски решенија за нивна добра организираност во работењето. Сепак, претпријатиските апликации не се само корисни за големите корпорации, агенции и влади. Предности на претпријатиските апликации е тоа што се потребни дури и за индивидуалните програмерите и мали организации во растечката мрежа низ целиот свет. Квалитети кои ја прават моќна претпријатиската апликација, како што се безбедноста и сигурноста кој се главни елементи во секој софтвер, често тешко се имплементираат во апликацијата и се доста сложени за секој програмер. Но со Јава ЕЕ платформата целиот овој систем е поедноставен и е дизајниран да се намали комплексноста на Enterprise Application кој им овозможува на програмерите да се концентрира само на функционалност на софтверот. Ивана Јованова 4

7 1.2 Цели на магистерскиот труд Иницијалните истражувачки активности во рамките на овој магистерски труд ќе бидат во насока на проучување на функционалнста на Dependecy Injection во Java платформата. Поточно стратегии за разрешување на конфликти и начините за подобро искористување на ресурси на оваа функционалност во Java. Планирање и донесување на соодветни одлуки за нејзино користење во модерните апликации. Искористување на нејзината функционалност со цел полесно креирање и обезбедување на независност во нашата апликација. Објаснување зошто е одбрана баш оваа проблематика и овој систем на независност во Java. Овој магистерски труд ќе покаже зошто и каде е потребно да се искористи функционалноста на Dependecy Injection и зошто е доста употребувана и потреба за една модерна апликација. Во оваа тема посебен осврт ќе биде даден на примената на ова технолигија во апликации од било која дејност, на кои една од многуте цели на оваа функционалност е нејзината независнот во поглед на програмирањето која овозможува независно проширување на софтверот без да направи промена во основниот модел кој што е креиран. Целта на оваа проблематика е да се олесни работата на секој програмер, и да може секој програмер да го надогради софтверот без да е запознаен со работа и кодот што е правен од некој си друг програмер. На тој начин се олеснува работата, функционалноста е многу подобра многу побрзо со помалку време ќе се искреира софтверот, бидејќе нема потреба од проучување на веќе постоечкиот код. Покрај проширување на софтверот, функционалноста на Dependecy Injection и успешноста на оваа проблематика е тоа што со помош на анотации се искористува веќе постоечки код. На тој начин се заштедува во време на креирање и пишување на нов код. Целата на оваа независнот ќе биде имлементирана и објаснета во овој магистерски труд. Ќе биде прикажан конкретен пример со објаснување на оваа функционалнсот. Магистерскиот труд е насочен кон истражување и анализа за употребата на оваа фунционалност која е доста употребувана и применета во развојот на модерните апликации. 1.3 Содржина на магистерскиот труд Анализата во трудот е базирана на шест дела: Запознавање со Java Enterprise Edition Зошто е одбрана Dependecy Injection (вметнување на зависности) како главна тема на магистерскиот труд Објаснување и запознавање на MVC апликациите Предности и недостатоци на вметнување на зависности (Dependecy Injection) Ивана Јованова 5

8 Нов dependency Injection - негово креирање Примена на Dependecy Injection во секојдневниот живот со соодветен пример Заклучок од целокупното истражување на магистерскиот труд Во првиот дел од трудот се презентирани основните дефиниции за Java платформата. Запознавање со Java платформата и програмерскиот јазик кој е доста употребувам во многу модерни апликации, современ програмски јазик кој е лесен за употреба во модерната ИТ технологија. Ќе бидат објаснети предностите за програмирање во овој јазик бидејки ќе биде употребуван во мојот пример за искористување и прикажување на функционалноста на Dependecy Injection која е и главна тема во овој магистерски труд. Во вториот дел ќе се образложи потребата и придобивките од примена на оваа функционалност во ИТ технологијата. Извршена е анализа и истражување зошто е одбрана баш оваа проблематика. Ќе бидат наведени некои примери и коментари од искусни програмери кој секојдневно ја користаат оваа независност. Вметнувањето на зависност ќе биде прикажанаа во соодветен пример кој што ќе биде направен во Spring Framework. Во овј дел ќе биде објаснето за оваа рамка, за нејзините предности од нејзионот користење, што преставува оваа рамка и зошто баш нејзе ја користиме во овј магистерски труд. Во третиот дел од магистерскиот труд ќе биде опфатен процесот на обезбедување на соодветна документација за предностите од употребата на Dependecy Injection. Објаснување зошто е одбрана оваа функционалност, зошто е често употребувана од страна на разни програмери во многу современи апликации. Нејзини предности и недостатоци, нејзина примена и искуства од програмери кои ја употребувале во својот код. Во четвртиот дел ќе се анализира MVC архитектурата која е потребна за една модерна веб апликација. Опис на една MVC архитектура, нејзината структура, распоред на код. Во овој дел ќе биде објаснето за NetBeans платформата во која ќе биде направена апликацијата, односно во која ќе биде прикажан примерот за вметнувањето на зависност (Dependency Injection). Во овој дел ќе биде објаснета и Hibernate платформата, која со негова помош е направена апликацијата во која имам вметнато DI. Во петтиот дел ќе биде направена функционалноста на вметнувањето на зависност. Ќе се направи нов dependency injection односно нов апстрактен метод кој ќе може да биде употребен од било кој друг програмер. Само со негово повикување ќе може да се употреби и користи во самиот код во кој ќе се креира апликацијата. Вметнувањето на зависност (Dependency Injection ) ќе може да го користи било кој друг програмер кој што ќе има потреба од таква функционалност во нашиот случај ќе биде функција за попуст. Во шестиот дел ќе биде обработено решение за оваа функционалност. Ќе прикажам соодветен пример во кој ќе биде покажена моќноста и употребливоста на оваа функционалност која е и причина за тема на мојот магистерски труд. Ќе биде Ивана Јованова 6

9 направен соодветен пример, ќе биде направена Веб апликација за Авио Билет која ќе се вика Wizzer, кој што на секој клиент кој што ќе купи по втор пат билет ќе му се даде попуст од 5%, ќе ја повикува функцијата која што ќе биде направена односно ќе го повикува Dependency Injection. Во седмиот дел ќе се направи примена на готов Dependency Injection, односно примена на фyнкцијата за попуст во апликацијата. Ќе се прикаже како може една готова зависна функција да се вметне со неколку чекори во некоја апликација без да се пишува код. Тоа ќе биде направено со вметнување на фајл во.jar формат во самата апликација. Во осмиот дел ќе бидат напишани статистики, кој ќе бидат истражувани од интернет. Мислење од искусни програмери за тоа каде и како треба да се употреби и искористи предноста на вметнување на зависност, и во кои случаеви не би ни користела оваа зависност. Во последниот дел ќе биде презентирана целокупната анализа за Dependency Injection, нејзината предност, нејзината популарност и функционалност која е доста проширена во ИТ пазарот. Ќе се донесе заклучок и мислење на целото работење на овој магистерски труд. 2. Прв дел - Јава платформа, Enterprise Edition Јава технологијата е програмски јазик и платформа. Јава програмскиот јазик е објектно-ориентиран јазик кој има специфични синтакса и стил. Јава е платформа со специфична средина во која апликацијата работи со Јава програмскиот јазик. Прва причина за популарност на овој јазик е тоа што е бесплатен. Може да се симне од секоја веб страница. Многу други програмски јазици се продаваат за многу скапа цена која е голема препрека за многу луѓе кои сакаат да учат за тој програмски јазик. Друга причина за популарност на овој јазик е тоа што може да се извршува на секакаква платформа. Со ова разбираме дека Јава е независна од платформата на која се извршува. Може да се користи за разни развојни апликации. Постојат едноставни текстуални програми наречени конзулни апликации. Такви програми овозможуваат текстуален влез и излез на секој компјутер. Со јава можат да се направат и апликации со графички комјутерски интефејс ( Graphical User Interface GUI ). Овие апликации располагаат со менија, копчиња, палета со алатки, контроли и.т.н. Можат да се креираат и апликации кои се наречени аплети ( Applets ). Тие се мали GUI апликации но содржат и веб страници. Друга популарна функција која што е популарна и доста корисна и употребувана е објектно-орентирана функција. Оваа функција кажува дека Јава е сочинета од основни деловни компоненти кој можат да се користат повеќе пати. Друга предност на овој програмски јазик е тоа што е лесен за употреба за разлика од другите програмски јазици и тоа е од голема предност бидејки лесно може да се научи. Ивана Јованова 7

10 Јава е програмски јазик е развиен од страна на Џејмс Гослинг и Sun Microsystems тимот. Овој јазик за првпат беше објавен во 1995 година. Јава јазикот е под влијание на јазици како што се C и C + +, сличен на нив а најмногу во неговата синтакса. Кога зборуваме за неговите принципи тој е едноставен објектно ориентиран програмски јазик. Неговите високи перформанси ја прошируваат неговата употреба кај голем дел од програмерите низ целиот свет. Негова најпозната карактеристика е автоматско управување со меморијата која доведува до многу висока споредба во однос со другите програмски јазици. Java Enterprise Edition (Java EE) е креирана за да одговори на овие потреби. Таа е збир од спицификации наменети за креирање на дистрибуирани апликации. Се базира врз стандардна единица JAVA и овозможува развој на дистрибуирани, робусни, моќни и лесно достапни апликации. Првата верзија на Java е промовирана во 1999 год., а денес е детално документирана платформа во која се креирани голем број апликации, поставени на разни сервери. Java EE е збир од спецификации кој што се имплементираат преку така наречени контејнери. Контејнерите се извршни околини (runtime environments) кои обезбедуваат сервиси (services) и управуваат со животниот век (life cycle ) на компонентите кој што се поставени во нив. Целта на Јава ЕЕ платформата е да обезбеди програмери со моќен сет на API-јата, скратување во време за развој на софтверот, намалување на сложеноста на програмерската работа и подобрување на ефикасноста на примената на работата со оваа платформа. Јава ЕЕ платформа е развиена преку Java Community Process (JCP), која е одговорна за сите Java технологии. Експертски групи, создаваат Јава Спецификациски барања (JSRs) за дефинирање на различни Јава ЕЕ технологии. Работата на Јава заедница во рамките на програмата JCP помага да се обезбеди стандардна Јава технологијата на стабилна и крос-платформска компатибилност. 2.1 Платформи на Јава програмскиот јазик Постојат три платформи во Јава програмскиот јазик: - Java платформа, Standard Edition (Java SE) - Java платформа, Enterprise Edition (Јава ЕЕ) - Јава платформа, Micro Edition (Јава МЕ). Сите платформи на Јава се состојат од Јава виртуелната машина (В.М.) и апликациски програмски интерфејси (APIs). Јава виртуелната машина е програма за посебни хардверски и софтверски платформи кои ги извршуваат Java апликациите. Ивана Јованова 8

11 API (Application Programming Interface) е збирка на софтверски компоненти кои може да се користи за креирање на други софтверски компоненти или апликации. Секоја платформа на Јава обезбедува API виртуелната машина, а тоа им овозможува на апликациите на Јава да работат на било кој компатибилен систем. Тука главна улога имаат и предностите на Јава програмскиот јазик и тоа: независност од платформата, сила, стабилност, олеснување на развој и безбедност. Java SE Кога се зборува за Јава програмскиот јазик, повеќето луѓе мислат на Java SE API. Јава API ги обезбедува основните функционалности на Јава програмскиот јазик. Ги дефинира сите основни типови на објекти на Јава програмскиот јазик на високо ниво на класа која се користи за работа со мрежата, безбедност, пристап до базата, развој на графички кориснички интерфејси (GUI) и парсирањето. Во прилог на основни API-ја, Java SE состои од виртуелната машина, развој на алатки, технологија за распоредување и библиотеки кој најчесто се користат во Java апликации. Јава ЕЕ Јава ЕЕ платформата е изградена на врвот на Java SE платформата. Јава ЕЕ ги обезбедува API-јата, извршувањето на животната средина за развој и извршување на големи, (мулти-нивоа), скалабилни, сигурни и безбедни мрежни апликации. Јава МЕ Јава МЕ платформа обезбедува API и виртуелната машина за да се изврши Јава програмскиот јазик за апликации на мали уреди, како што се мобилни телефони. API е подмножество на Java SE API, заедно со специјални класи и библиотеки корисни за развој на апликации за мали уреди. Јава МЕ апликациите често се клиенти на Јава ЕЕ апликациската услуга. Многоетапни дистрибуирани апликации Јава ЕЕ платформа се користи за дистрибуирани многоетапни апликациски модели за претпријатиски апликации. Применетата логика е поделена на модули според функција и разни апликациски компоненти кои го сочинуваат Јава ЕЕ апликацијата и се инсталирани на различни машини во зависност од нивото на многоетапна Јава ЕЕ животната средина, кој припаѓа на апликациската компонента. Слика 1 ги покажува нивоата на Јава ЕЕ апликациите: Ивана Јованова 9

12 Слика 1 - Клиент ниво - компоненти кои работат на клиентската машина - Ниво Веб - компоненти кои работат на Јава ЕЕ сервер - Бизнис ниво - компоненти кои работат на Јава ЕЕ серверот - Enterprise информативен систем (EIS) ниво - компоненти кои работат на EIS серверот. Тоа може да се смета дека компонентите кои работат на Јава ЕЕ апликација на серверот се на ниво на логика, која е поделена во две под-нивоа: - Веб ниво - Бизнис ниво. Иако Јава ЕЕ апликација може да се состои од три или четири нивоа, Јава ЕЕ апликациите за многоетапна генерално се смета за апликација на три нивоа, бидејќи тие дистрибуирани машини се на три локации: - Клиентот машина - Јава ЕЕ серверот машина - База на податоци или наследство машини (задниот крај). Ивана Јованова 10

13 2.2 Јава ЕЕ клиенти Јава ЕЕ клиентот може да биде: - Или веб клиент - Клиент или апликација. Веб клиент Веб клиент се состои од два дела: динамички веб страници, кои содржат различни типови на Markup Language (HTML, XML или слично), кои се генерирани од страна на Веб компоненти, кои можат да работат на интернет ниво, и Веб прелистувач која ја прикажува страната добиена од серверот. Веб клиентот понекогаш се нарекуваат тенок клиент (thin client). Тенок клиент обично не пристапува до база, не извршува некои комплексни работи и не е поврзан со некое наследство од некоја апликација. Кога се користи тенок клиент, сложените операции се префрлени на серверот што може да се подигнат на нивото на безбедност, брзина, услуги и сигурноста на Јава ЕЕ од страна на сервер. Аплети Веб страница добиени од Веб ниво може да содржи аплети. Аплет е мала клиентска апликација напишана во Јава програмскиот јазик кој се извршува во Јава виртуелната машина инсталирана на веб читач. Веб компоненти претпоставаат API за создавање на веб клиент програма, бидејќи не се потребни никакви plug-in-или безбедносна политика за датотеки на клиентот систем. Исто така, веб-компоненти овозможуваат појасен и модуларен дизајн на апликацијата, бидејќи тие го обезбедуваат начинот за одделување на апликацијата од дизајнот на веб страницата. Затоа, оние кои се вклучени во дизајнот на веб страните не треба да ја разбираат синтаксата на Јава програмскиот јазик за да си ја завршат својата работа. Примена клиенти Клиентската апликација се извршува на клиентската машина и овозможува на корисниците начин да се справат со задачи кои бараат побогат и покомплексен кориснички интерфејс. Вообичаено, графички кориснички интерфејс е (GUI Graphical User Interface) креирано од AWT (AbstractWindow Toolkit) класа. Ако постои потреба за примена на клиенти, може да се направи со HTTP врска да се воспостави комуникација со сервлети кои работат на веб ниво. Примена на клиентите напишана во друг јазик за програмирање можат да воспостават интеракција со Јава ЕЕ серверите, овозможувајќи им на Јава ЕЕ платформа соработка со наследените системи и клиенти кои не мора да се од Јавa јазиците. Ивана Јованова 11

14 2.3 Предности за користење на Java технологија се: Независна платформа ( Windows, Mac OS X, Linux ) Релативно брз развој Разумен лесен за употреба и лесно подесување во однос на платформата Подршка од сите поголеми бази: MySQL, SQLite, PostgreSQL, MSSQL, Oracle, DB / 2 Добра подршка за мрежните технологии: REST or SOAP, ftp, ssh, etc. Постојат три главни причини зошто Јава е толку популарен: 1. Таа е бесплатна за разлика од другите ривали. 2. Независна платформа, може да ја напишеме било каде и да ја стартуваме. Накратко кажано, откако еднаш ќе напишеме апликација, таа може да работи во многу различни средини. 3. Мемориски менаџмент Покрај тоа, стандардната библиотека на Јава има одлична работа на ракување и управување со меморијата и мрежни операции. Бидејќи Јава работи на повеќе платформи, тоа нуди уникатна можност за развивање на дел или цела програма на нашиот комјутер. Постојат пет примарни цели за создавање на Јава јазикот : 1. Треба да се користи методологијата на објектно-ориентираното програмирање. 2. Овозможување на апликацијата да се извршува на повеќе оперативни системи. 3. Содржи вградена поддршка за користење на компјутерски мрежи. 4. Дизајнирана е на тој начин со што овозможува безбедно извршување на кодот од извори на далечински управувач. 5. Лесен за користење и ги има наследено сите добрите делови на постарите објектно-ориентирани јазици како C + +. Програмирањето во Јава е многу полесно. Дополнително, со оглед на тоа дека кодот во Java е независен од архитектурата, Java апликации се идеални за различни средини како што се мобилни уреди и веб апликации. Во денешно време програмскиот јазик Јава има голема распостранетост во мобилниот пазар (PDA, Blackberry, мобилни телефони, GPS системи, итн). Ова значи дека популарноста на оваа технологија продолжува, а со тоа Јава ќе продолжи да се развива и нејзината популарност ќе остане на пазарот. Ивана Јованова 12

15 Бенефит од користење на Јава програмерскиот јазик Напиши еднаш, работи насекаде Sun Microsystems тимот идентификува "Напиши еднаш, работи насекаде", како предлог на основната вредност на платформата Јава. Преведувано во бизнис жаргон тоа би значело дека Java технологија е тоа што само треба да се напише апликација еднаш за платформата на Јава и тогаш таа апликација ќе биде во можност да се стратува од било каде односно секаде каде што имаме подршка од Java платформата. За среќа Java платформата е сепристуна таа треба да биде интегрирана или да се интегрира со речиси сите поголеми оперативни системи. Ја има во изградбата на сите популарни Web прелистувачи кој што ги поврзуваат различни PC насекаде во светот. Java ја има скоро во многу електронски уреди, како што е телевизијата, сет-топ боксови, мобилни телефони и.т.н. Безбедност Друга клучна придобивка на Java се нејзините безбедносни карактеристики. Јава платформа им овозможува на корисниците да превземе недоверлив код преку мрежа и да се стартува во безбедна средина во која не може да се направи никаква штета. Не дозволува да влезе некој вирус во PC то во кое се превзема кодот, не може да се чита во хард дискот ниту пак да запише нешто, оваа способност ја прави Јава платформата уникатна и најзбезбедна платформа за програмирање. Во Java 2 Platform постојат по добри безбедносни системи односно постојат нивоа и безбедносни ограничувања со високо конфигурабилен дел со кој ги штитат и своите аплети. Во Java 1.2, секој Java код, без разлика дали тоа е аплет, Servlet, компонента JavaBeans, Java апликација може да се работи со ограничени дозволи кои спречуваат да се направи штета на домашниот хост. Безбедносните карактеристики на јазикот Јава платформа биле подложени на интензивен надзор од страна на експерти за безбедност во целиот свет. Поврзани со безбедноста на грешки, некои од нив се сериозни,но се пронајдени и веднаш решени. Мрежа-центрично Програмирање Корпоративна мотото на Sun Microsystems тимот отсекогаш бил "мрежата е компјутер." Дизајнерите на платформата Јава верува во важноста на вмрежувањето и дизајнирање на Јава платформа да биде мрежа-централно. Од гледна точка на програмерот, Java овозможува лесно да се работи со средства преку мрежата и да се создадат мрежни-базирани апликации со употреба на клиент / сервер архитектура. Ова значи дека Јава програмери имаат сериозен проектот за економијата на мрежите. Ивана Јованова 13

16 Динамична, Extensible Програми Јава е и динамична и растеглива. Јава кодот е организирана во модуларни објектноориентирани единици наречени часови. Класите се чуваат во посебни датотеки и се вчитуваат во Јава преведувач само кога е потребно. Ова значи дека апликацијата може да одлучи дали да се извршат класите и да ги вчитаме тогаш кога нас ни се потребни.. Тоа исто така значи дека програмата може динамички да се прошири со вчитување на класи кои треба да ја прошират својата функционалност. Централниот мрежен дизајн на платформата Јава значи дека Java апликација може динамички да се прошири со вчитување на нови класи преку мрежа. Апликација која носи предност на овие карактеристики престанува да биде монолитен блок од код. Наместо тоа, тој станува интеракциска збирка од независни софтверски компоненти. Така, Јава овозможува нова моќна метафора за дизајн и развој на апликации. Интернационализација Јава најчесто се употребува како програмски јазик кој има интернационализација додека повеќето програмски јазици користат 8-битни карактери кои претставуваат само писмо на англиски и западните јазици во Европа, Јава користи 16-битна Unicode знаци кои претставуваат фонетската азбука и идеографски сет на знаци на целиот свет. Карактеристиките на интернационализација на Јава не се ограничени на само ниско ниво на застапеност ова овозможува полесно да се пишува и интернационализира програма во Java отколку во некоја друга средина. Ефикасност на софтверот Најважен бенефит и употреба на Јава јазикот е тоа што програмерите ја сакаат. Јава е елегантен јазик во комбинација со моќни и добро дизајниран сет на API-јата. Програмерите уживаат во програмирање во Јава и обично се изненадени од тоа колку брзо тие можат да добијат резултати со неа. Истражувањата постојано покажуваат дека има се поголем број на Јава програмери, со што покажува на ефикасност на јазикот. Бидејќи Јава е едноставен и елегантен јазик со добро дизајниран, интуитивен сет на API-јата, програмерите пишуваат подобар код со помалку грешки отколку за други платформи, се намалување времето за развој на една апликација што е една огромна позитивна страна и голем бенефит на секој програмер. Според сето ова и според моето истражување ја одбрав Java EE платформата за изучување и за употреба во мојот магистерски труд. Ја избрав оваа технологија како што може да се види и од погоре дека една од најдобрите и најприфатените технологии во софтверскиот пазар, која е доста развиена, има голем дел на туторијали со цел проблемите да се решат на побрз, полесен и подобар начин. Покрај голем број на туторијали како што е кажано погоре лесна е за изучување за разлика од другите програмски јазици. Според моите истражувања најдов доста докази и статии од искусни програмери кој докажуваат дека Java технологијата е најприфатлива и најдобра програмерска алатка на пазарот. Ивана Јованова 14

17 Во овој магистерски труд ќе се задржам на Java EE платформата, но акцентот ќе биде ставен на Dependency Injection, неговото настанување и неговата голема употреба во Java технологијата. 1. Втор дел - Зошто е постои Dependecy Injection? Вовед за Dependency Injection Со еден прост пример ќе го објаснам функционирањето на вметнување на зависноста (Dependency Injection) со еден пример од реалниот живот. Сценарио 1 Работиме во една организација каде што колегите имаа потреба да патуваат. Општо за да се направи план за летање со авион потребно е да се најде авион, да се резервира место, лет, да се обезбеди место во кабината. За да се направи резервација потребано е да се јавиме во агенција каде што ги организира патувањата, а потоа да закажеме каде треба да летаме, време на летување, место на летување, датум кога треба да се полета, потоа агенцијата да ни резервира и да се јави на потребната авионаската агенција и да ни го букира летот. Така би изгледа едно типично планирање на лет со авион. Во случај да се смени агенцијата тогаш би имале нов начин за резервирање на летови. Новата агенција има нов пристап до закажување на лет. Таа тоа го прави на многу едноставе начин преку интернет конекцијата ќе можеме да си резервираме лет наместо преку телефонски разговор. Овој нов пристап на закажување на лет мора да го направат сите колеги кој што треба да патуваат а со тоа ќе се потроши време за адаптација на новиот начин на букирање на лет. Ова може да доведе до значителен износ на време кое ќе се потроши во процесот на приспособување. Сценарио 2 Сега да речеме дека протоколот за закажување на лет е поинаков. Во компанијата има административен оддел. Кога и да е потребно да се патува се обраќаме кон адмистративниот оддел кажуваме кога сакаме да летаме, каде сакаме да летаме, тие ќе ги направат резервациите за нас. Ако има некоја промена во однос на летот административниот оддел ќе не информира за секоја промена. Летот ќе биде резервиран во посакуванот датум, ќе биде закажан во соодветно време и билетите ќе бидат доставени до нас. Во случај ако склопот на агенции се промени во процесот на резервирање како во претходниот случај, одделот за администрација ќе бидат свесни за тоа и тие ја имаат можноста да комуницираат со агенцијата за летови а потоа промените да им ги кажат на своите колеги. Ивана Јованова 15

18 Вметнување на зависности (Dependency Injection)? Во двете сценарија, јас сум клиент и јас сум во зависност од услугите кои ги нуди од страна на агенциите. Сепак Сценарио 2 има неколку разлики. Јас како клиент во второто сценарио немам потреба од контакти на телефонски броеви, немам допир со агенцијата за резервација за лет, туку работата ја препуштам на одделот на администрација и ако имам некакава потреба они ќе ме информираат. Сервисот од кој сум зависна и останатите колеги кој имаат потреба од летање треба сам да ги менува своите услоги и да не информира за сето тоа. Ова ни преставува вметнивање на зависности (Dependency Injection) во реалниот живот. Оваа зависност не преставува ништо ако е само за еден човек, но ако се замисли дека ќе се направи цела промена за организацијата тогаш заштедата би била значителна. Вметнување на зависност во контекст на софтвер Софтверски компоненти (клиенти), често се дел од множество на соработка на компоненти кои зависат од другите компоненти (услуги) за успешно завршување на нивната намена. Во многу сценарија, тие треба да знаат "што" да комуницираат со клиентите "каде што" да ги лоцираат и "како" да комуницираат со нив. Кога начинот кај овие услуги може да се пристапи да се менува, таквите промени потенцијално може да имаат потреба од извор на многу клиенти на кои им се потребни промени. Еден од начините на структурирање на кодот е да гo споделиме со клиенти за вградување на логиката на лоцирање и инстанцирање на услугите, како дел од нивните вообичаени логики. Друг начин да се структурира кодот е да се има клиенти кој ќе се изјаснат за својата зависност од услугите, и да има некој надворешен код кој ќе ја превземе одговорноста за лоцирање и инстанцирање на услуги и едноставно обезбедување на релевантни референци на услуги на клиентите кога е потребно. Во вториот метод, клиент кодот обично не е потребен да одговара на промените бидејки постои надворешен код кој го регулира тоа. Овој тип на имплементација се смета за имплементација на вметнување на зависност со надворешно парче на код кој веројатно ќе биде кодиран и споредуван понатаму во останатиод код. Користењето за вметнувањето на зависност одговара на софтвер кој треба да декпларира зависности и да овозможи околината во која се работи да се приспособува на коплексноста на услугите кој што се бараат да се извршат, иницијализирање, секвенционирање и снабдување на услугите кој што ги бара клиентот и кои мора да бидат реализирани. Ивана Јованова 16

19 Вметнување на зависност (Dependency Injection) Едно од забавни нешта за Јава во светот е огромна сума на активност во градењето на алтернативи на mainstream от во J2EE технологиите, многу од тие активности се случуваат во отворениот код. Има голем број на реакции за комплекснота во mainstream от во J2EE технологиите, но исто така има голем број на истражувања со цел да се олесни таа коплексност. Заедничкиот проблем е да се справи со поврзувањето на различни елементи: како да се вклопуваат заедно во една веб архитектура, вклопување со таа база на податоци, интерфејс - поддршка кога тие би биле изградени од различни тимови и.т.н. Јас би ја користела компонента која би имала значење како глобална компонента која ќе ја употребам во мојот софтвер, без да направам некави промени во останатите компоненти кој се користат. Кога зборувам за без промена, тоа значи дека ќе употребам компонента која нема да направи промени во изворниот код и нема да го смени однесувањенто на другите компоненти кој биле креирани од други програмери. Услугата на компонентата би била слична на компонентата која се користи од страна на различни апликации. Главна разлика би била тоа што очекувам компонентата да се користи локално (мислам на фајл, датотека, асамбли, DLL, импортирање и.т.н). А услугата ќе се користи од далечина преку некои далечински интерфејси синхрони или ансихрони (на пример веб сервиси, системски пораки, RTC ) Користење на вметнување на зависности Вметнување на зависности (Dependency Injection ) е најновата развојна лудост денес. IOC контејнери како што е Spring, стануваат се популарни, бидејќи тие ја поедноставуваат комплексноста на претпријатиските апликации, кој доаѓа главно од именувањето на Java и Директориумскиот интерфејс. Ивана Јованова 17

20 Што е преставува вметнувањето на зависности (Dependency Injection)? Повеќето претпријатски апликации користат надворешни ресурси и услуги, како извори на податоци EJB и веб сервиси. Во J2EE, клиентот мора експлицитно да прогласи зависности за ресурсот опишувач на изгледот и упатување кон ресурсите. Вметнувањето на зависности е контрадикција во JNDI. Овозможува декларација на зависност и им овозможува на Јава ЕЕ контејнер да управува со сложената инсталација и иницијализација на сервисите и услугите ако се потребни. Врз основа на декларацијата на ресурси со користење на описна анотација или аранжман, Јава ЕЕ контејнер е воведен (инјектиран) во појавата на ресурси кога е тоа потребно. Сликата споредува JNDI и Dependency Injection. За полесно да се разбере и опише Dependency Injection ќе ја објаснам со пример. Во овој пример пишувам компонента која обезбедува листа на филмови во режија на одреден директор. Ова корисна функција ќе се спроведува од страна на еден метод. class MovieLister... public Movie[] moviesdirectedby(string arg) { } List allmovies = finder.findall(); for (Iterator it = allmovies.iterator(); it.hasnext();) { } Movie movie = (Movie) it.next(); if (!movie.getdirector().equals(arg)) it.remove(); return (Movie[]) allmovies.toarray(new Movie[allMovies.size()]); Со спроведувањето на оваа функција, може да се види дека е наивен пример, бидејки ќе ги врати сите филмови кој се режисирани од одреден директор(режисер). Овој наивен дел од кодот ќе го поправам со следниот код. Ивана Јованова 18

21 Вистинската поента во овој дел е објекот за пронаоѓање, и како ќе ја споиме листата на објеки со објектот за пронаоѓање. Причината за сето ова е тоа што методот moviesdirectedby треба да биде целосно независен од тоа каде се филмовите зачувани. Ова методот се однесува на објекот за пронаоѓање и објекот за пронаоѓање кој ќе знае како да одговори на тој методот односно на findall методот. Подоле е дефиниран јавниот метод. public interface MovieFinder { } List findall(); Понатаму треба да ставам одредена класа за филмовите и тоа ќе го направам со конструктор на мојата MovieLister класа. class MovieLister... private MovieFinder finder; public MovieLister() { } finder = new ColonDelimitedMovieFinder("movies1.txt"); Сега ќе можам независно да ја користам класата, но што ќе се случи ако некој од моите колеги сака да ја копира мојата програма? Ако тие чуваат филмови со "movies1.txt", тогаш е добро. Но што ако тие имаат сосема поинаква форма на чување нивниот филм: база на податоци SQL, XML датотеката, веб сервис, или уште една форма на текст фајл? Во овој случај ни треба различни класа за да се земат податоците. Јас би го дефинирав MovieFinder интефејсот и тоа нема да го смени moviesdirectedby методот, но сепак треба да се најде начин да се добие истанца за да објектите се спроведат во своето место. Ивана Јованова 19

22 Сликата ги покажува зависностите за оваа ситуација. Класата MovieLister е зависна од двете MovieFinder интерфејси и нивното спроведување. Импплементацијата на класата за пронаоѓање не треба да се стави во кодот на програмата, бидејки не се знае за што нашите колеги ќе ја искористат апликацијата. Проблемот е како листер класата ќе ја игонорира имлементациската класа, но со помош на инстанцата ќе може да работи. Во реалнит систем, би можеле да имаме десетици такви услуги и компоненти. Во секој случај може да се направат компоненти кој ќе комуницираат со интерфејси. Но, ако сакаме да се распоредат во овој систем на различни начини, ние треба да ги користите додатоците за да се справиме со интеракција на овие услуги, и да можеме да ги користиме во различни имплементации на различни распоредувања. Значи јадрото на проблемот е како да се соберат овие додатоци во некоја апликација? Ова е еден од главните проблеми со кои се сретнуваат голем број на програмери кој го решааваат унивирзално со користење на Dependency Injection. 3.1 Вметнување на зависности (Dependency Injection) Вметнување на зависности е жаргон креирано од Мартин Фаулер исто така се нарекува и вметнување на контролата. Во објектно ориентираното програмирање, објектите имаат врска една со друга. А класа (А) може да имаат атрибути и методи од (Б) класа.тие атрибути можат да бидат инстанца од друга (Ц) класа. Ако класа (А) сака да работи и да ги извршува своите објетки во класа (Б) тогаш атрибутите од класа ( Б) треба да бидат инстанцирани. Постојат различни начини да се покажат објектите, но наједноставен и директен начин е користење на нови оператори и повик на конструктор од класа (Ц) каде што ќе ни треба инстаца од класа (А). Вметнување на зависности е заедничка карактеристика на framework-от, па се смета дека контејнерите се специјални бидејки ја користат оваа функционалност. Главното прашање во оваа проблематика е во кој аспект вметнувањето на зависност интевенира? Порано корисничките интерфејси биле контролирани од самата апликација. Тогаш се поставуваа голем број на прашања и команди од типот Внесете го своето име, Внесете ја вашата адреса, и апликацијата нон стоп ќе одговара на поставените прашања. Со новата функционалност на вметнување на зависности се подобрува изгледот на имплементацијата на самата апликација. Ивана Јованова 20

23 3.2 Форма на вметнување на зависности (Dependency Injection) Основна идеја на зависната инверзија е да има еден посебен објект, асабмблер кој ќе ја потполнува класата со соодветна импелментација на пронаоѓачкиот интервејс. Резултат од вметнување на зависности (Dependency Injection) е дијаграмот на сликата. Постојат три стила на зависна интеграција. Констуктор интеграција Сетер интеграција Интерфејс интеграција Oд погоре наведеното можеме да заклучиме дека зависната инекција е стил на кодирање кој има свои корени на кодирање. Има стил во кој ги има своите корени од делегациските објекти кој ја користат шемата од класата за наследување (на пример еден објект може да се користи во повеќе класи). Друга работа која и е потребна на Dependency Injection е за креирање на објектен интефејс. Со комбинирање на овие две моќни алатки, се поставени темелите на моќни дизајнерски софтверски решенија кој за програмерите се доста флексибилни и полесни за одржување, а тоа е и целта на појавата на оваа функција за вметнување на зависности. Сепак одразот на оваа компонента е способноста за програмирање и креирање на објекти, конфигурирање и вметнување помеѓу другите објекти со користење на системот за надворешен и независен објект. Исто така јазикот мора да обезбеди добра поддршка за двете нормално објектно ориентирано програмерски техники, како и поддршка за објектни интерфејси и објект рефлексија (на пример Java и C #). Можат да се изградат програми со користење на вметнувањето на вредности во С++ кој ќе има рефлектирачка подршка од другиот јазик со кој ќе може да се употреби таа функција. Ивана Јованова 21

24 3.3 Кога треба да го користиме вметнувањето на зависности? Вметнување на зависности е моќна техника која може да се примени во многу ситуации низ сите слоеви на апликацијата. Но, ова не значи дека вметнувањето на зависност треба да се користи во секое време во класа од која зависи друга класа. Вметнувањето на зависност е многу ефикасена кога имаме повеќе компоненти и треба сите заедно да ги конфигурираме особено ако асоцијацијата помеѓу компонентите трае во текот на целиот живот на компонентите. Поконкретно, вметнување на зависности (Dependency Injection) е ефикасена во овие ситуации: Треба да се инјектираат конфигурацијата на податоците во една или повеќе компоненти. Треба да се внесе истата зависност во повеќе компоненти. Треба да се инјектираат различни имплементации на истите зависности. Треба да се внесе истата имплементација во различни конфигурации. Овие ситуации имаат едно нешто заедничко. Тие често укажуваат дека компонентите заедно претставуваат различни или независни концепти, обврски и припаѓаат на различна апстракција во слоевите на системот. На пример, конфигурацијата на базата на податоци (url, корисник, лозинка) и имплементацијата на изворот на податоци се различни поими. Слично на изворот на податоци и класа DAO класите кои претставуваат различни концепти и припаѓаат на различни слоеви на апстракција. Секоја од овие ситуации се опишани во повеќе детали подолe. 1. Инјектирање Конфигурација на податоци Ако на компонента и треба надворешена конфигурација на податоци, имаме ефикасен начин на вметнувањето на зависност која треба да ја обезбеди компонентата на податоците. На пример, изворот за имплементација на податоците, обично се потребни најмалку четири параметри: возачот - име на класата, база на податоци URL, корисничко име и лозинка. Еве еден пример што користи скриптата за конфигурација на контејнери: Ивана Јованова 22

25 2. Вметнување исти зависности во повеќе компоненти Ако треба да се внесе истата зависност во повеќе компоненти, полесно и често се применува употребата да се има контејнер кој ќе го направи тоа. На пример конфигурирањето на изгледот на панелот за имплементација често му се потребни неколку DAO класи. Еве еден пример што ја користи скриптата за конфигурација на контејнери: Изворот за дефиниција на податоци се користи од конфигурацијата на вметнувањето на зависност. Изворот на податоци е дефинирано како единечна, така што истиот пример на SimpleDataSource се инјектира во двете userdao и productdao. 3. Инјектирање на различни имплементации со иста зависност Понекогаш треба да се вметнат различни имплементации на некои зависности во една или повеќе компоненти. На пример, ако имаме едно копче компонента во десктоп GUI апликација, можеби ќе сакаме да инјектира на различни имплементации од различни примачи. Кога копчето ќе биде кликнато Селектираниот слушател ќе биде повикан. Ќе ни треба различни имплементации за селектираниот слушател за секое посебно копче. Следува пример каде што се користии оваа проблематика. Ивана Јованова 23

26 Прво еднократно копчето е дефинирано. Ова е направено за да се избегне обврската да се напише "org.eclipse.swt.widgets.button" и "addselectionlistener" за секое копче во сценариото. Во ова копче ќе се внесе параметар 0 и 1 во конструктор, а параметар 2 во addselectionlistener () метод. Потоа имаме различни копчиња, addbutton и validatebutton, кои ќе бидат дефинирани. Нема потреба од објаснување за останатите параметри, тие се неопходни за да се разбере овој пример. Важно е дека две ралични имплементации на SelectionListener интерфејс се инјектира во два случаи на иста компонента. 4. Вметнување на зависност на иста имплементација во различни конфигурации Вметнувањето на зависности е исто така ефикасен начин за снабдување на различни инстанци од иста компонента, но во различни конфигурации, на други компоненти. Тоа може да звучи малку апстрактно, па тука е едноставен пример за користење на скриптата за конфигурација на контејнери: Овој пример дефинира три клиент. Секој клиент зависи од URL инстанцата. Две URL случаи, server1 и server2, се дефинирани порано и се вбризгува во client1 и client2. Последниот клиент client3, исто така има URL пример кој инјектира во неа, но е дефинирана на локално ниво, како повик за URL-то. Постои значајна разлика меѓу зависноста во client1, client2 и client3. Ова е само да се покажат различни опции. Важно е да се забележи во примерот погоре дека сите три клиенти зависат од истата компонента, java.net.url класа, но секој клиент има различно конфигуриран пример во кој се вметнува зависност. 3.4 Кога не треба да користиме вметнување на зависност? Вметнување на вредности не е ефикасна ако: Никогаш не ни треба различна имплементација. Никогаш не ни треба различна конфигурација. Ивана Јованова 24

27 Ако знаеме дека никогаш нема да се промени спроведувањето или конфигурација на некои зависности, не постои корист за користење на вметнување на зависности. Ова важи и за локалните променливи. На пример, ако сме во изградба на низа на користење на StringBuilder, најверојатно никогаш нема да се употребат различни спроведувањето на StringBuilder, или на пример со различна конфигурација. Тогаш нема причина да се инјектираат во StringBuffer. Еве еден пример: Во овој пример не постои апсолутно никаква причина да се направи StringBuilder кој ќе се користи во tostring () методот. Никогаш нема да требаат различни имплементации, ниту поинаку конфигуриран StringBuilder. Треба да се има на ум дека дури и ако барањето не може да се стави во различни спроведувањето на некоја компонента, таа сепак може да биде корисна во можност да се инјектираат различни имплементации во текот на единица за тестирање. 3.5 Зошто да користиме вметнување на зависност? Вметнувањето на зависности можеме да го објасниме со еден прост пример од секојдневниот живот. На пример за да изготвиме еден чај, треба да припремиме вода, бокал, останати состојки како шекер, мед и.т.н. Треба да ја зовриеме водата и да го подготвиме чајот на начин на кој што си го правиме и сакаме да го пиеме. Претпоставуваме дека сами си го подготвуваме чајот секојдневно, но дали некој би го направил тоа за нас. Некој што ќе го подготви на начин на кој што си го подговуваме ние секојдневно? Дали е подобро некој да ни го направи или треба нон стоп да си го правиме сами? Ако одговорот е да, подобро е некој да направи нешто за нас тогаш тоа ни преставува вметнувањето на зависност. Вметнувањето на зависност работна средина која што овозможува креирање на објекти за нас без да се грижи за сите дополнителни работи. Ивана Јованова 25

28 3.5.1 Пример за Вметнување на зависности Да претпоставиме дека имаме класа Person, класа која што сака да прати некоја порака. Класата Person бара помош од друга класа за да и прати порака. Ова го гледаме во кодот на сликата подоле. Ова очигледно се две едноставни класи и јасен пример во кој вклучува две едноставни Јава класите. И покрај дадениот код постојат некои ограничувања за двете класи. Класата Person е зависна од класа. Да претпоставиме дека имаме нова и подобра верзија на класа, Fast . Оваа класа е подобра за нас и за да ја користиме треба да ја внесеме во секоја класа од која е таа зависна, во нашиот случај таа е зависна од класата Person и секаде каде што постои класата треба да ја заменува рачно со новата класа Fast . Да претпоставиме дека имаме конструктори, повторно треба да одиме во секоја класа да ја иницијализираме како и во класа така и во Person класата треба да ги направиме промените. Со цел да се подобри системот за известување на пораки, ние одлучуваме да додадеме различни системи за испорака на пораката како СМС или Твитер профили. Класата Person и други како нејзе, треба да бидат изменети со цел да се искористат новите имплементации. Другo инвеститорот треба да ја користи класата Person, но би сакал да користи различен начин за известување и пракање на пораки. Ова не може да се постигне со тековната верзија на класата Person како што е условено со класа. Она што обично се случува е дека другите инвеститорот дупликати класата Person да се менуваат по потреба. Проектите завршува со две верзии на класата Person. Во горенаведените сценарија видовме дека кодот треба да трпи многу промени. Сите направени промени треба да се тестираат. Класата Person зависи од друга класа, тука Ивана Јованова 26

29 тестирањето ќе се усложни. Како ќе го истестираме кодот во класата Person без да го употребиме кодот за праќање на пораки од класата ? Како што почнав да го прикажува сценариото класите почнуваат да зависат една од друга. Оваа ограничување може да се подобри со промена на начинот на кој размислуваме и го пишуваме кодот во модуларен начин. Тука треба да употребиме вметнување на зависност за да си ја олесниме понатамошната зависност во класите. За да немаме зависност помеѓу класите треба да го промениме начинот на кој го програмираме кодот. Класата обезбедува услуга, а тоа е испраќање на пораки преку Интернет со користење на протоколот за електронска пошта. Наместо да има класа Person парафирање инстанца на класа , подобро е да создадеме интерфејс, MessageService, и наместо користење на класата Person би го користеле интерфејсот. Ова ги отстранува зависност која што класата Person ги има кон класата тоа го обезбедуваме со апстрактен интерфејс за испраќање на пораката. Дефинирањето, имплементацијата и користењето на овој начин на размислување ќе го прикажам со соодветен пример, на кој што се гледа како тетирањето би се олеснило при ваков начин на пишување на код. 1. Дефинирање Интерфејси Многу програмери не користат интерфејси и не е морално креирање и употреба на интефејс во кодот. Има случаеви каде што кодот би бил подобро организиран без употреба на интерфејс. Сепак, развојот на кодот со интерфејси произведува многу подобар и модуларен код. Во претходните примери имавме едноставни случаеви каде што немавме потреба од интефејс, но во второто сценари би било подобро да употребиме интефејс, бидејќи менување на кодот во подоцнежна фаза значи повеќе работа отколку што тоа би го направиле на почетокот. Ќе дефинирам интерфејс MessageService што вклучува еден метод, sendmessage (Strnig subject, string message). 2. Имплементирање Интерфејси Во листата на ограничувањата кои ги споменавме имаме четири можни начини на праќање на порака: е-пошта, брза пошта, SMS и твитер. Ќе прикажам четири класи кои ќе се справат со секој метод на испраќање на пораката и ги имаат сите овие класи имплементира со интерфејс. Ивана Јованова 27

30 3. Користење интерфејс Конечно, наместо користење на класи, ние ги користиме интерфејси. Во класата Person, ќе го замени полето со интерфејс MessageService. Ивана Јованова 28

31 Класата Person не е парафирање на услугата пораката но таа преставува параметар на своите конструкторот. Ова е клучен елемент во дизајнот. Тоа ја подобрува модуларност и тестирање. Класата Person не е зависна од секоја примена, но на услугата што е дефинирано од страна на интерфејс. Ова значи дека ние може да ја користи класата Person, без да се грижиме за основнaта имплементација на услугата за пораки. Исто така, друг човек во друг случај може да инстанцира користење на различни услуги во пораката. Може да се тврди дека во новата верзија на класата Person стана покомплексен кога треба да прикажуваме параметри. Тука станува збор за вметнување на зависност, и во овој случај е потреба нејзина примена. Употреба на вметнување на зависност Зависното вметнување може да ни помогне за парафирање на објекти и да ги обезбеди сите објекти со своите потребни ресурси. На пример, класата Person одговара на барањата на интефејсот MessageService. Платформата за вметнување на зависност ќе го обезбеди тоа за нас. Значи треба да направиме инстанца за класата Person и само да ја повикаме. Реална платформата за вметнување на зависност е да креирате инстанца од класата Person и ќе пристапиме кон инстанцата од MessageService до објектот на класата Person. Понатаму кажуваме како треба да се креира инстанца од класата MessageService, и исто така треба да се овозможи инјектирање на потребните параметри. Ивана Јованова 29

32 Истиот концепт може да се однесува и на Spring платформата или други платформи во кои може да се имплементира вметнувањето на зависност. Секоја платформа има својот начин на конфигурација за оваа зависност. Spring и другите платформи каде што се употребува оваа зависност користат различни методи за конфигурација. Во нашиот пример креиравме инстанца за класата Person со употреба на вметнување на зависност. Од овој пример може да заклучиме дека заменивме некои линии на код со многу други. Во тој случај го упростуваме кодот, не пишуваме премногу код и помалку код е полесен за тестирање, која што е главна предност при користење на оваа зависност. 3.6 Вовед во Spring Framework За да го прикажеме вметнувањето на зависност како функционира, каде можеме да ја употребиме и колку предности можеме да добиеме од неа, ни треба платформа каде што ќе ја напишеме и примениме вметнувањето на зависност. Во овој магистерски труд целата функционалност на независната интеграција ќе биде имлементирана во Spring платформата. Ивана Јованова 30

33 3.6.1 Преглед на Spring Framework Во овој дел ќе ги опишам потеклото на оваа платформа, предностите зошто е употребувана и технологии каде што се применува. Spring е најпопуларна програмерска апликациска платформа за enterprise Java. Таа е отворена изворна платформа за Јава и е напишана од страна на Род Јонсон која за прв пат е објавен од страна на Apache 2.0. Лиценцирана е во Јуни Spring-от е лесен од страна на транспорт и големина. Неговата основна големина изнесува 2 МБ. Основна карактеристика на оваа платформа е тоа што овозможува програмирање на било каква Јава апликација. Постојат екстензии за градење на Јава веб апликации, насочена е и за правење на Ј2ЕЕ развојни апликации за полесно програмирање и нивната употреба е тоа што е овозможено од РОЈО базичниот програмерски дел Бенефити од користење на Spring Framework Предности од користење на Spring платформата се следниве: Spring им овозможува на програмерите да развијат апликациска класа со употреба на Јава објекти, а предноста за користење на Јава објекти е тоа што не треба никаков ЕЈВ контролер како апликациски сервер, но со употреба на овој модел ќе имаме можност од користење на еден робусен сервер како на пример Tomcat или некој друг комерцијален продукт. Spring е уредно модуларен организиран. Иако има голем број на класи и пакети кој се значителни, треба да се грижиме само за потребните а другите автоматски ќе се игнорираат. Spring овозможува користење на некои од постојаните технологии како ORM, JEE, JDK тајмери и други технологии. Тестирањено на апликацијата напишана во Spring е многу едноставано, бидејќи кодото напишан во оваа платформа може да се тргне и понатаму да се користи во JavaBean стилот и моделот на Јава објектите во кој многу полесно може да ги истестира зависностите во кодот. Spring веб платфомрата е добро организирана и за MVC плаформите, кој што овозможуваат одлична алтернатива за веб платформите. Spring обезбедува удобен API да се преведе технологијата за специфични исклучоци (од страна на JDBC, Hibernate, или JDO) на пример во согласност изберете исклучоци. Ивана Јованова 31

34 Spring обезбедува конзистентна трансакција за управување со интерфејс што може да ја намали до локална трансакција (со користење на единствена база на податоци). Постојат голем број на бенефит од користење на Spring платформата, ќе издвојам неколку: 1. Предефинирани темплејти Во Spring платформата постојат и обезбедува повеќе шаблони за JDBC, Hibernate, JPA итн технологии, па нема потреба да се пишува премногу код. Тоа се крие во основните чекори на овие технологии и за тоа се доста употребувани. На пример да земеме еден JdbcTemplate, не треба да се пишува многу код за создавање на конекција, за создавање на изјава, извршување на трансакција, затварање на конекција и.т.н треба само да се напише код за извршување на барањето на тој начин ќе се спасиме од многу JDBC код и ќе го олесниме програмирањето. 2. Тенок спој Апликациите се слободно поврзани, бидејки тука постои зависноста (Dependency Injection). 3. Лесен за тестирање Со вметнувањето на зависност кодот станува полесен за разбирање а нормално полесен и за тестирање на апликацијата. EJB или Struts апликациите бараат серверот да ја изврши апликацијата додека Spring платформата не бара сервер. 4. Едноставен Spring платформата е поедноставана од останатите платформи, а тоа го овозможува спроведување на POJO. Оваа платформа не бара од програмерот да мора да наследи некоја класа или да мора да спроведи некој интерфејс. 5. Брз развој Вметнувањето на зависности во Spring платформата и поддршка на различни платформи го прави Spring лесен за развој на JavaEE апликација. Ивана Јованова 32

35 6. Моќна апстракција Таа обезбедува моќен апстракција на JavaEE спецификации како што се JMS, JDBC, JPA и JTA. 7. Декларативна поддршка Таа обезбедува декларативна поддршка за кеширање, валидација, трансакции и форматирање. Spring платформата вклучува неколку модели кои нудат широк спектар на услуги: Вметнување на зависност (Dependency Injection) конфигурација на апликациските компоненти, управување со менаџментот на Java објектите а тоа се прави преку вметнување на зависност. Аспект-ориентираното програмирање овозможува спроведување и имплементирање на попречените врски. Пристап до податоци работа со релациони системи за управување со база на податоци за Јава платформа управување со JDBC и објектнорелациони алатки за мапирање со NoSQL бази на податоци Менаџмент на трансакции обединува неколку API-јата за управување со трансакција и координира трансакции за Јава објекти Модел-Преглед-Контролор(Model view controller) HTTP- и Servletбазирани платформи за обезбедување на врски за проширување и прилагодување на веб апликации и веб услуги. Платформта за далечински пристап, пристапување на Јава објекти преку мрежи поддршка на RMI, CORBA и HTTP-базирани протоколи, вклучувајќи веб сервиси (SOAP). Вметнување на зависност (Dependency Injection) во Spring Технологијата која најмногу се употребува во оваа платформа е вметнувањето на зависност. Вметнувањето на зависност е општ концепт на тоа како може да се одрази независната интергација на различни начини. На пример кога пишуваме сложени апликации, апликациските класи треба да бидат независни едни од други со што ќе ја зголемат нивната можност од повторно употребување на истите класи во друг дел од апликацијата. Вметнувањето на зависности помога во лепење на истите класи а воедно и прави независнот помеѓу нив. Вметнувањето на зависности може да се Ивана Јованова 33

36 имплементира од страна на параметрите на конструкторот и од страна на конструктори проследени со методи. Аспект ориентирано програмирање (АОП) Една од клучните компоненти на Spring е аспект објектираното програмирање АОР Функциите кои траат во неколку точки на апликацијата се нарекуваат вкрстени проблеми и овие раскрсници се концептуално одвоени од бизнис логиката на апликацијата. Постојат различни добри примери од аспект на логирање, декларација, трансакции, безбедноста, кеширање итн. Клучна единица на модуларност во OOP е класа, додека во АОП клучна единицата на модуларност е аспект. Додека ООР помага да се одвои апликација од објекти едни на други, АОП помага да се одвојат раскрсниците кој се однесуваат на објектите врз кој тие влијат. Модулот во АОП во Spring платформата обезбедува имплементација на аспект-ориентираното програмирање овозможувајќи дефинирање на метод-пресретнувач и точки кој ќе можат да го одвојат кодот кој ја спроведува функционалноста, кој треба да биде одвоен од раскрсницата која се однесува на објектите кој влијаат. Ивана Јованова 34

37 Платаформа за пристап на податоци Поддршка е обезбедена за сите популарни платформи за пристап до податоци во Јава: JDBC, ibatis / MyBatis, Hibernate, JDO, JPA, Oracle TopLink, Apache OJB, и Apache Cayenne, меѓу другите. За сите овие платформи за база на податоци, Spring обезбедува неколку карактеритики: Управување со ресурсите - автоматски стекнување и ослободување на ресурси во база на податоци Исклучок ракување - преведување на пристап до податоци поврзани со исклучок на хиерархија пристап до податоци во Spring Присуство на трансакцијата - транспарентно учество во тековните трансакции Сите овие карактеристики се достапни при користење на дефиниција на класи обезбедени од страна на Spring платформата. Критичарите велат дека овие класи се нападни и не нудат предност во однос на користење (на пример) на API директно. Во одговор на тоа, програмерите во Spring го направија тоа можно за користење на Hibernate и JPA API-јата директно. Ова сепак бара транспарентно управување со трансакција, како апликациски код кој повеќе не ја презема одговорноста за да добие ресурси од базата на податоци. Заедно со трансакцијата за управување во Spring, во рамки на своjot пристап до податоци нуди флексибилна апстракција за работа со пристап до податоците. Spring платформата не нуди API пристап до заедничките податоци но наместо тоа, таа целосна моќ на поддржани API-јата се чува недопрена. Spring платформата е само платформа којашто е достапна во Јава, кој нуди управувана средина, пристап до податоци надвор од сервер апликација. Ивана Јованова 35

38 Платформа за управување со менаџментот на трансакциите Платформа за управување со трансакција во Spring носи механизам за апстракција на платформата Јава. Нејзината апстракција е способна за: Да работи со локалните и глобалните трансакции (локални трансакцијата не бара апликација на серверот) работа со вгнездени трансакции работа со savepoints работат во речиси сите средини на платформата Јава За споредба, JTA поддржува само вгнездени трансакции, глобалните трансакции, и бара апликација на серверот (а во некои случаи и распоредување на апликации во апликација на серверот). Во Spring платформата има за голем број на стратегии за управување со трансакција: Трансакции управувани на поврзување JDBC Трансакции на објектно-релациони мапирања за единиците на работа Трансакции кои управува преку JTA TransactionManager и UserTransaction Трансакции на други ресурси, како објект бази на податоци Заедно со платформата за пристап на податоци - која ги интегрира платформите за управување со трансакција - можно е да се постави на трансакциски систем преку Ивана Јованова 36

39 конфигурација, без да се потпираат на JTA (Java Transaction API)или EJB (Enterprise Java Beans). Трансакциската платформа, исто така, се интегрира со пораки и кеширање. Модел-Преглед-Контролор(Model view controller) Оваа платформа дефинира стратегијата интерфејси за сите одговорности што мора да се постапува од страна на современите платформи врз основа на веб барањата. Целта на секој интерфејс е да бидат едноставни и јасни, така што тоа е лесно за корисниците на Spring MVC да пишуваат свои имплементации. MVC го отвора патот за почист по уреден код. Сите интерфејси се тесно поврзан со Servlet API. Оваа цврста спрега на Servlet API се гледа од страна на некои како неуспех од страна на развивачите на Spring да им понуди апстракција на високо ниво за веб-базирани апликации. Сепак, оваа спојка прави сигурни карактеристиките на Servlet API кои остануваат на располагање на програмерите додека нуди висока апстракција за да се олесни работата со API-јата. Најважните интерфејси кои се дефинирани од страна на Spring MVC, и нивните одговорности, се наведени подолу: Контролор: доаѓа помеѓу модел и Преглед за управување со дојдовни барања и се пренасочува кон соодветна реакција. Тоа дејствува како портата, која раководи со информациите што доаѓаат. HandlerAdapter: извршување на објекти кои се справи со новите барања HandlerInterceptor: следење на пристигнати барања кои се споредливи, но не е еднаква на Servlet филтри (употребата е задолжителна, а не се контролирани од страна на DispatcherServlet). Ивана Јованова 37

40 HandlerMapping: избирање на предмети кои ќе се справат со новите барања (ракувачи) базирани на било кој атрибут или состојба интерни или екстерни на тие барања LocaleResolver: решавање и евентуално, заштеда на код на индивидуален корисник MultipartResolver: олеснување на работата со датотека подигнати со групирање на пристигнатите барања Поглед: одговорни за враќање на одговор на клиентот. Некои барања можат да одат директно без да одат во модел делот, другите може да одат низ сите три. ViewResolver: избирање на Поглед врз основа на логичко име за поглед Секоја стратегија погоре има важна одговорност во целокупната рамка. Апстракциите понудени од страна на овие интерфејси се моќни, па за да се овозможи збир на варијации во нивната имплементација, Spring MVC се имплемантира на сите овие интерфејси и заедно нуди функција на врвот на Servlet API. Spring MVC користи интерфејс Јава java.util.map како податоци-ориентирана апстракција за модел, каде што копчињата се очекува да бидат стринг вредности. Леснотијата на тестирање на имплементација на овие интерфејси чини една важна предност на високо ниво на апстракција понудени од страна на Spring MVC. DispatcherServlet е тесно поврзан со Spring инверзија на контрола на контејнер за конфигурирање на веб слоеви на апликации. Сепак, веб апликации можат да се користат и во други делови на Spring рамката. Ивана Јованова 38

41 Платформа за далечински пристап Платформа за далечински пристап во Spring е апстракција за работа со различни RPCбазирани технологии достапни на платформата Јава и за клиент конекција и сервер објекти. Најважната карактеристика понудена од страна на оваа платформа е да се олесни конфигурација и употреба на овие технологии, колку што е можно со комбинирање на вметнување на зависности и АОП. Оваа платформа обезбедува грешка обновување (автоматска реконекција, по прекинот на врска) и некои оптимизации за клиент. Spring обезбедува поддршка за овие протоколи и продукти: HTTP-базирани протоколи Хесен: бинарни продолженија протокол, отворен извори и одржуван од страна на CORBA-базирани протоколи RMI (1): метод за повикување кој специфични за Spring. користи RMI инфраструктура кои сеуште се RMI (2): метод за повикување на RMI интерфејси во согласност со редовна употреба RMI Ивана Јованова 39

42 RMI-IIOP (CORBA): метод за повикување RMI-IIOP / CORBA SOAP Интеграција со Apache Web сервиси Ивана Јованова 40

43 3.6.3 Архитектура на Spring платформата Во овој дел е опишана основната ахитектура на Spring со нејзините блокови кој се наречени модули во софтверската терминологија. Spring потенцијално би можело да биде едношалтерски систем за сите апликации но сепак тој е модуларен и одбира кој модули се релеватни за програмерот. Core Container (Основен контејнер) Во овој дел се состои јадрото, beans-от, контекстот и програмерскиот јазик. Модулот на јадрото ги обезбедува основните делови на платформата, вклучувајќи ги и IoC и карактеристиките на вметнувањето на зависности (Depenedency Injection). Модулот на Beans ја обезбедува BeanFactory која е софистицирана имплементациска алатка. Контекст модулот се базира на солидна основа која е обезбедена од страна на јадрото и Beans модулите. Модулот за јазик обезбедува моќен јазик за манипулација со објекти и нивно извршување. Ивана Јованова 41

44 Пристап до податоците / Интеграција Овој слој се состои од JDBC, ОРМ, OXM, JMS и Трансакциски модули чии детали се : Модулот JDBC обезбедува JDBC-апстракциски слој кој помага во отстранување на потребата што треба да се направи JDBC врска на кодирање. Модулот ОРМ обезбедува интеграциски слоеви за популарни објектнорелациони мапирање на API-јата, вклучувајќи ги и JPA, JDO, Hibernate, и ibatis. Модулот OXM овозможува апстракциски слој кој поддржува XML мапирање и имплементација на JAXB, XMLBeans, JiBX и Xstream. JMS модулот содржи функции за производство на одземени пораки. Трансацискиот модул поддржува програмска и декларативна трансакција, управување со класи, кои ги применуваат специјалните интерфејси и за модулите на Јава објектите. Веб Веб слојот се состои од веб, Веб-Servlet, веб-struts, и веб- Portlet модули. Веб модулот обезбедува основни веб-ориентирани интеграциски карактеристики како што се повеќеделни датотеки, функционалност и иницијализација на контејнер со користење на сервлети и веб-ориентиран апликациски контекст. Модулот веб-servlet содржи spring модел-поглед-контролер (MVC) Модулот веб-struts содржи поддршка на класи за интегрирање на класично веб ниво во рамките на една spring апликација. Модулот веб-portlet обезбедува MVC имплементација која ќе се користи во платформата и ќе се пресликува незјината функционалнсот во веб-servlet модул. Разно Постојат неколку други важни модули како АОП, Аспекти, инструментација, веб и испитување на модули чии детали се опишани подоле: Модулот АОП обезбедува аспект-ориентираното програмирање и имплементација која ќе овозможи да се дефинира пресретнувачки метод и точки кој овозможуваат, кодот кој ја имплементира функционалноста да биде одделен. Ивана Јованова 42

45 Аспектните модули обезбедуваат интеграција со AspectJ што е моќен и доста функционален во аспект ориентирано програмирање (АОП). Инструментацискиот модул обезбедува класа за инструментација на поддршка и класа имплементации кој се користат во одредени апликациски сервери. Тест модулот поддржува тестирањето на spring компоненти со JUnit или TestNG платформите. 4. Трет дел - Вовед во MVC аплицкации За да ја дизајнираме нашата веб страна потребна ни е алакта со која ќе го направиме тоа. Денеска популарни веб апликации се MVC апликации. Составени се од модел, преглед и контролер. Оваа софтверска архитектура ја дели застапеноста на податоците од интеракцијата на корисникот. MVC архитектура е широко распостранета и се користи за пристап на интерактивни апликации за дистрибуирана функционалност помеѓу примената на објектите, со цел да се минимизира степен на преклопување меѓу самите објектите. Да се постигне оваа цел, заедничките апликации се делат во три слоја: Модел, Поглед и Контролор. Секој слој врши специфични задачи и има обврски кон други класи. Во парадигмата на MVC на корисничкиот влез, моделирање на надворешниот свет како и визуелна повратна информација до корисникот се експлицитно одвоени и се ракувата со три типа на објект секоја специјализирана за својата задача. Погледот управува со графички и текстуален излез на дел од битмапираниот дисплеј кој е наменет за негова примена. Контролорот управува со глувчето и тастатурата како влезови од страна на корисникот. Моделот управува со однесувањето на податоци и примената на доменот, одговара на барањата за информации на неговата состојба и одговара на инструкции за промена. Формалната поделба на овие три задачи е важна идејата особено погодна за Smalltalk-80, каде што основните за однесување може да се отелотворени во апстрактни објекти: поглед, контролор, модел и објектот. За да се користите ефикасно MVC парадигма мора да се разбере поделба на трудот во рамките на MVC тријада. Исто така мора да се разбере како на три дела да се комуницира и со други активни ставови и контролори, споделување на еден глушец, тастатура и екран помеѓу неколку апликации кои бараат соодветна комуникација и соработка. Да се направи најдобрата употреба на парадигмата MVC исто така треба да се запознаат и да бидат достапни поткласи на гледање и контролор кои нудат готови почетни точки за апликациите. Првиот дел е моделот, кој е најниско ниво на моделот кој што е одговорен за одржување на податоците. Ивана Јованова 43

46 Прегледот е одговорен за прикажување на сите податоците или само оние кој што му се потребни на корисникот. Контролер кој е последно ниво односно софтверскиот код кој е одговорен за интеракцијата помеѓу моделот и изгледот. MVC е популарен затоа што овозможува излолација на логичката апликација помеѓу нивото на корисничкиот интефејс и подршка на разделените врски. Модел Моделот е одговорен за управување со податоци на апликацијата. Тој одговара на барањето од ставот а исто така реагира на инструкциите од контролорот за самиот да се ажурира. Поглед Презентацијата на податоците во одреден формат, се предизвикани од одлуката на контролорот да ги презентира самите податоците. Тие се скрипта базирани на темплејти во системите како ЈСП, ASP, PHP и многу лесно да се интегрираат со AJAX технологијата. Контролерот Контролорот е одговорен за одговарање на влезот на корисник и изведување интеракции на моделот на податочните објекти. Контролорот добива влез, тоа ги Ивана Јованова 44

47 потврдува влезните параметри и состојбата на моделот на податоци. врши деловна соработка, кој ја модифицира 4.1 Архитектура на MVC Каков што спомнав со MVC шемата, апликација се дели на три главни слоеви: презентација (UI) примена на логиката управување со ресурсите Во MVC, презентацискиот слој е поделен на контролор и изглед. Најважната поделба е помеѓу презентација и применетата логика. MVC опфаќа повеќе од архитектурата на барањата отколку што е типично за дизајн шемата. Оттука терминот архитектонски модел може да биде корисен и како дизајн шема. Моделот - застапеност на информациите од кои зависи примената на работите. Моделот е друго име за применетиот логички слој (понекогаш наречен и домен слој). Многу апликации го користат како механизам за складирање (како што е база на податоци) за чување на податоци. Поглед - Преставува приказ на моделот во форма погодна за интеракција обично преставува елемент на корисничкиот интејфејс. MVC најчесто се употребува во веб апликации, каде што погледот е HTML страница и код кој собира динамички податоци за оваа страница. Контролорот - Процесира и реагира на настани, обично на кориснички акции, и може да се повика за да го промени моделот и изгледот на апликацијата. Ивана Јованова 45

48 Во MVC протокот за контролата генерално работи на овој начин: 1. Корисникот се поврзува со кориснички интерфејс, на некој начин (на пример, корисник притиска копче) 2. Контролер се справува со влезниот настан од корисничкиот интерфејс, често преку регистриран управувач или повратен повик. 3. Контролорот пристапува кон моделот, можеби со ажурирање на начин соодветен за корисникот. Комплексноста на контролорите често се структури со користење на командската шема за да капсулира акции и да го поедностави продолжувањето. 4. Погледот користи модел за да генерира соодветен кориснички интерфејс. Погледот добива свои податоци од моделот, додека моделот нема директна врска со погледот. 5. Корисничкиот интерфејс чека за понатамошна корисничка интеракции, со која што циклусот започнува одново. 4.2 Комуникација со MVC тријадата Моделот, погледот и контролорот се вклучени во MVC тријада кои мора да комуницираат едни со други, секоја апликација треба да управуваат со кохерентна интеракција од корисникот. Комуникацијата помеѓу погледот и неговите поврзани контролери е јасна, бидејќи погледот и контролорот се дизајнирани да работат заедно. Моделот од друга страна комуницира во повеќе суптилни начини. Ивана Јованова 46

49 Пасивен модел Наједноставен случај за пасивен модел е употреба на стринг во MVC тријада. Погледот мора јасно да биде информиран за секоја промена во текстот, така што тој може да го ажурира. Сепак, моделот не мора да ја превземе одговорноста за комуницирање на промените затоа што овие промени се случуваат само со барањата од корисникот. Контролорот може да ја превземе одговорноста за известување во погледот на било какви промени, бидејќи така ги толкува барањата на корисникот. Тоj едноставно може да го извести ставот дека нешто е променето. Погледот тогаш може да ја побара моменталната состојба додека моделот - или контролорот може да се прилагоди на тоа како се променил погледот. Во секој случај, стрингот модел е целосно пасивна носителот на стринг податоците кои манипулираат со погледот и контролорот. Моделот е целосно "свесен" за постоењето на контролорот и на неговото учество во MVC тријада. Врска на модел - контролерот Методите кои нудат индиректна зависна комуникациска врска се во протокол на "ажурирање" на класа објект. Пораката "промени" започнува со најавата на сите зависни објект од кои настанала промената на објектот. Примачот на пораката испраќа порака за ажурирање. Стандардниот метод за ажурирање е порака, која е наследена од објект, и не прави ништо друго. Повеќето пати имаат протокол за прикажување на приемот за ажурирањето на порака. Овој механизам за ажурирање е избран како комуникациски канал преку кој ставовите можат да бидат известени за промените во своите модели, бидејќи на тој начин се става најмало ограничување на структурните методи. Објект може да дејствува како модел за повеќе од една MVC тријада во исто време. Секој поглед ќе има свој соработувачки контролер. Кога моделот е сменет, сите зависни пораки може да бидат известени. Ако само подмножество на овие ставови одговорат на одредената промена, во моделот може да помине аргумент што укажува на зависните промени што се случиле, така што само оние кои се заинтересирани ќе имаат потреба од одговори. Секој ресивер може да ја провери вредноста на аргументот со кој е утврден одговорот. Врска на поглед контролерот За разлика од моделот, кој може лабаво да се поврзи со повеќе MVC тријади, секој поглед е поврзан со уникатен контролер и обратно и тоа ако ги земеме како пример променливата на контролерот и променливата поврзана со изгледот. Бидејќи и двете мора да комуницира со својот модел, секој има пример на модел кој што укажува на објект моделот. Иако моделот е ограничен за испраќање на промени кон самиот себеси тој може директно да испрати пораки од еден во друг модел. Ивана Јованова 47

50 Погледот превзема одговорност за формирање на оваа меѓусебна комуникација во рамките на дадената MVC тријада. Кога ги добива пораките модел контролерот, погледот ги регистрира како зависни во моделот укажуваат на нивниот контролер и ја праќа пораката само до контолерот кој што го контролира изгледот. 4.3 MVC апликацијата во Spring платформата Модел-поглед-контролерот во рамките на Јава веб апликациите се доста бројни и повеќето од нив интегрираат во Spring платформата и најстрогите интеграции можат да се најдат во модулот на самиот MVC. Историјата за примена на MVC во Spring платформата потекнува од Стивен Хаинс кој започнува за историја на парадигмата на MVC во јава веб апликациите. Покрај развој на оваа функционалност го објаснува Нотинген концептот во Spring, вклучувајќи ја и зависноста на компонентите (Dependency Injection). Преку програмерски туторијали станува основувач на карактеристиките за употребата на MVC во Spring платформата. Во натамошна еволуција на Јава ЕЕ технологии, употребата на Spring во MVC стана главен избор за развој на секакви видови на апликации. Ивана Јованова 48

51 4.3.1 Преглед на Spring со MVC Во текот на првите денови на Enterprise JavaBeans (EJB), програмерите предводени од Род Џонсон ја создале Spring платформата како лесна алтернативна за комплексноста во Јава ЕЕ. Целта на Spring платформата и една од најголемите добивки е вметнувањето на зависности (Dependence Injection) (ДИ). ДИ е дизајн шема, основана од страна на Мартин Фаулер, кој ги одделува зависностите на апликацијата (и зависноста конфигурација) од код кој ги користи овие зависности. Поентата е дека апликација треба да се фокусира на решавање на своите проблеми, а Spring-от се фокусира на објектите за да бидат достапни за извршување со кој апликацијата непрекинато ќе работи. Spring MVC помага во градењето на флексибилни и незавинси веб апликации. Моделпоглед-контролерот дизајн шемата помага во независната бизнис логика, презентациска логиката и навигациска логика. Моделите се одговорни за концезирање на податоците од пријавата. Контролорите се одговорни за приемот на барањето од страна на корисникот и повикувајќи на позадински услуги. На сликата подоле е прикажан протокот на барањето во Spring MVC платформата. Ивана Јованова 49

52 Кога барањето е испратено до Spring MVC платформата се случува следниов распоред на настаните. Диспечерскиот сервлет (DispatcherServlet) прв го добива барањето. Диспечерскиот сервлет се консултира со Handler Mapping-от и се повикува на контролорот поврзан со барањета. Контролорниот процес на барање се повикува на соодветен давател на методи и враќа Модел-поглед објект на Диспечерскиот сервлет (DispatcherServlet). Објектот Модел-поглед содржи модел на податоци и приказ на името. Диспечерскиот сервлет (DispatcherServlet) го испраќа изгледот на името на ViewResolver за да го најдете вистинскиот изглед и да го повика. Диспечерскиот сервлет (DispatcherServlet) ќе помине во моделот на објектот и во изгледот ќе ги направи резултатите. Погледот со помош на моделот на податоци ќе ги даде резултат назад до корисникот. 4.4 Вовед во NetBeans платформа NetBeans е платформа за развој на софтвер напишани во Јава. NetBeans платформата им овозможува на апликации да се развиваат од еден сет на модуларни софтверски компоненти наречени модули. Апликации базирани на платформа NetBeans, вклучувајќи NetBeans интегрирана средина (IDE), може да биде продолжена и надградувана од трета страна на развивачите. NetBeans IDE првенствено е наменет за развој на Java, но исто така поддржува и други јазици, особено PHP, C / C ++ и HTML5. NetBeans е крос-платформа и работи на Microsoft Windows, Mac OS X, Linux, Solaris и други платформи компатибилни JVM(Java Virtual Machine). NetBeans IDE е бесплатен, софтвер со отворен код, овозможува развој на интегрирана средина (IDE), кој овозможува да се развие десктоп, мобилни и веб апликации NetBeans IDE обезбедува сеопфатна поддршка за JDK 7 технологии и најновите подобрувања на Java. Таа е првиот IDE која обезбедува поддршка за JDK 7, Јава ЕЕ 7, и JavaFX 2. IDE целосно го поддржува Јава ЕЕ користење на најновите стандарди за Java, XML, Web сервиси, и SQL и целосно го поддржува Glassfish Server, референтна имплементација на Јава ЕЕ. NetBeans платформата Ивана Јованова 50

53 Платформа за поедноставување на развојот на Јава десктоп апликации. NetBeans IDE пакет за Java SE го содржи она што е потребно за да се започне развој на NetBeans и NetBeans платформата со базирани апликации во која не се потребни дополнителни пакети. Апликациите може да се инсталираат на платформата. Било која апликација може да го вклучуваат модул за Центар за ажурирање за да им овозможи на корисниците пријава за да ги превземат дигитално потпишаните надградби и нови функции директно во работата на апликацијата. Инсталационите надградби или нова верзија не ги принудува корисниците повторно да ја превземат целата апликација. Платформата нуди еднократни услуги заеднички за десктоп апликации, им овозможува на програмерите да се фокусира на логика специфични за нивната примена. Главни карактеристиките на платформата се: Управување со кориснички интерфејс (на пример, менијата и алатки) Управување со кориснички поставувања Складирање за управување (заштеда и вчитување на било каков вид на податоци) Прозорецот за управување Рамка волшебник (поддржува чекор-по-чекор) NetBeans Visual Библиотека Интегриран развој на алатки NetBeans IDE е бесплатен, софтвер со отворен код, крос-платформа IDE со вграден во поддршка на Јава програмскиот јазик. Примерот за приказ на функцијата за вметнување на зависност ќе биде прикажан во оваа платформа која што ќе користи Spring рамка за прикажување и доловување на предностите за користење на вметнувањето за зависност во Јава технологија. 4.5 Hibernate Платформа Вовед Доследните податоци може да се видат насекаде во некоја апликација. Управување со доследни податоци е една од многуте предизвици во модерните технологии со кои денеска се соочуваме. Решението наречен Објектно-Релациони мапирање (ОРМ) се здоби со голема популарност во текот на изминатите неколку години. ОРМ е парче Ивана Јованова 51

54 софтвер, производ за претставување и конверзија на податоци помеѓу базата на податоци и објектно-ориентиран програмски јазик. Хибернација е едно такво решение ОРМ и претставува проект со отворен код. Иако Hibernate платформата не е единственото решение за доследноста, таа стана многу позната во текот на изминатиот период поради својот огромен спектар на функции, во споредба со своите конкуренти. Таа зазема голем размер во базата на податоци со кои работи програмерот и нејзина главна цел е да се концетрира на бизнис логиката на апликацијата а не на грешките склони кон SQL синтаксата. Постојаност на податоците Дефиницијата за постојаност на податоци е ", податоци кои можат да бидат зачувани на некои постојани средни и можат да се видат во секој момент на времето, дури и по завршувањето на апликацијата во која се употребени тие податоци". Постојаните податоци не се лесна задача, и таа е една од основните потреби за речиси секоја апликација. Складирањето на податоци може да биде на хард-диск и во база на податоци. Бази на податоци се најчестиот медиум за складирање на постојаните податоците, поради релативно едноставен начин за пристап на податоци со користење на Структурно јазик за пребарување (SQL) складирање. Податоците во базата на податоци може да се гледа во табела, каде што секој ред во табелата претставува единствена евиденција на податоците. Hibernate платформата го поедноставува развојот на Java апликациите за да се комуницира и лесно да се пристапи со базата на податоци. Хибернација отворен код, лесен за употреба, ОРМ (Објектно-Релациони мапирање). Алатка ОРМ го поедноставува креирањето на податоците, манипулација со податоци и пристап до податоците. Тоа е техника за програмирање која што го мапира објектот на податоците кои се зачувани во базата на податоци. Алатка на ОРМ интерно го користи на JDBC API за комуникација податоци. со базата на Ивана Јованова 52

55 Предности на Hibernate платформата 1) Отворен код и лесен за употреба: Hibernate рамка е отворен код под лиценцата LGPL и лесен за употреба. 2) Брзи перформанси: Перфомансите од Hibernate платформата се брзи, бидејќи кеш интерно се користи во рамките на хибернација. Постојат два вида на кеш во состојба на хибернација кеш платформа првото ниво и второ ниво кеш. Првото ниво кеш е овозможено по стандарт. 3) База на податоци за независно пребарување: HQL (Hibernate Query Language) е објектно-ориентирана верзија на SQL. Таа ги генерира независните пребарувања во базата на податоци. Значи, не треба да се напишат во базата некои специфични пребарувања. Пред Hibernate, ако базата на податоци се менуваат за проект, треба да се променат SQL пребарувањатакои што се дел од одржувањето. 4) Автоматско креирање табела: Hibernate платформата обезбедува објектот за да се создадат автоматски табели за базата на податоци. Па нема потреба да се создаваат табели во базата на податоци рачно. 5) Го поедноставува комплексното врзување на табелите: Многу е полесно да се додадат податоци од повеќе табели. 6) Oбезбедува статистички податоци за пребарување и статусот на база на податоци: Hibernate поддржува Query кеш, обезбеди статистички податоци за пребарување и статус за базата на податоци. Ивана Јованова 53

56 5. Четврт дел - Предностите од користење на вметнување на зависности Главни и основни предности на зависната интеграција се: Слободна архитектура Поделбата на одговорноста во апликацијата Конфигурацијата и кодот се посебни Користење на конфигурација, различни имплементации можат да бидат испорачани без да се менува во зависниот код. Тестирањето може да се спроведе со користење на лажни објекти. Употреба на вметнување на зависности има голем бенефит во поглед на лесно одржување и креирање на самата апликација. Голема предност е повторната употреба на "зависната" функционалност која е добро дефинирана во интерфејсите, и овозможува конфигурација на одделни предмети кој ќе ракуваат со друга платформа во соодветна апликација. Со користење на вметнувањето на зависност тестирањето станува многу поедноставно. Тоа е голема предност на секој програмер. Функционалноста изразена од страна на објектот може да се тестира со правење на други објекти. Зависноста (Dependency Injection) е доста флексибилна. Флексибилноста значи дека му овозможува на програмерот да одбере колку објекти му се потребни да се поврзат за неговиот интерфејс од една страна и изразните интефејси од друга страна. Надворешна (XML) конфигурацијата на објектите на зависноста значи дека другите објекти можат да се прилагодите кон код од апликација во непредвидени правци. Надворешни конфигурација е исто така поделба на шема, во која сите проблеми на објектот иницијализаат и управувачкиот објектот може да пристапува од страна на апликацијата на серверот. Треба да се знае дека надворешните конфигураци не се потребни за да се користи моделот на вметнување на зависност за едноставни интерконекции на мал објект. Постои губиток на флексибилност помеѓу двете интеконекции. Објектот на зависноста не е толку флексибилен како видливата надворешна конфигурација. Креаторот на зависната интеграција мора да ги гледа предностите на флексибилноста на интеграцијата, водејки сметка дека изградбата на мали контроли на објектот можат да ја зголемат конфузијата и трошоците за одржување на апликацијата. Ивана Јованова 54

57 Други придобивки од употребата на вметнувањето на зависноста се следниве: Намалена зависност Намалена употреба на зависноста Подобар и почесто употребуван код Подобар код за тестирање Читлив код Намалена зависност Вметнувањето на зависности овозможува да се елиминира или барем да се намали непотребната зависност. Компонентата е подложена на промени во своите зависности. Ако се промени зависноста, компонентата мора да се прилагоди на промените. На пример, ако некој метод се менува, и компонентата треба да се промени според тој метод. Кога компонентната зависност е намалена тогаш самата компонента е подложена на помалку промени. Намалена употреба на вметнување на зависност Друга убава корист на вметнување на зависности е тоа што таа ја елиминира употребата односно "носење на зависноста ". Носење на зависноста е кога објектот зема параметар во еден од неговите методи кои не му се потребни, само му е потребен еден од страна на објектите кој ќе ја извршуваат својата работа. Сето ова може да се види со пример А компонента А апликација создава конфигурациски објект. Конфигурацискиот објект не е потребен на сите, туку само на некои компоненти од системот. Конфигурациски објект А -> Б -> В -> Д -> Config Стрелките симболизираат метод повици. Ако A го создава Б, и В ја создава Д и Д треба да е конфигурациски објект, тогаш конфигурацискиот објект треба да биде усвоен по целиот пат од А до Б, од Б кон В и конечно од В до Д. Меѓутоа, бидејќи ниту Б или В не се конфигурациски објекти тие само ќе ја завршат својата работа односно ќе ја пренесат комуникацијата до Д а тоа зависи од Config и од таму доаѓа терминот "носење на зависноста ". Подобро и почесто употребуван код Намалување на зависните компоненти обично го прави кодот полесен и поразбирлив од различен контекст. Фактот дека зависностите може да инјектираат и затоа се Ивана Јованова 55

58 конфигуриран однадвор, се зголемува употребливоста на таа компонента. Ако една компонента сакаме да се спроведе со некој поинаков интефејс и има потреба за различен контекст, компонентата може да се програмира како ќе му одговара на програмерот без да го промени кодот. Подобар код за тестирање Вметнувањето на зависност, исто така ја зголемува тестабилноста на компонентите. Кога зависностите може да се инјектираат во компонентите можно е да се инјектираат и во имплементациските интерфејси. Лажните објекти се користи за тестирање како замена за вистинска имплементација. Однесувањето на лажниот објектот може да се конфигурира. На тој начин компонентата може да биде тестирана од различни начини и да се увидат проблемите ако воопшто постојат. Читлив код Вметнувањето на зависност се движи во зависностите на интерфејсот на компоненти. Ова го прави кодот полсен за читање со што може многу полесно да се види зависноста на една компонента. Нема потреба да се мине низ целиот код за да се види дали зависноста ја задоволува компонентата, тоа може многу лесно да се види од самиот интерфејс. Бенефит од користење на вметнување на вредности (Dependency Injection) искуства од програмери Вметнувањето на зависности може различно да се дефинира и толкува. Може да се кажат различни дефиниции за неа, некои велат дека вметнувањето на зависност преставува дизајнирање на некој интерфејс и пишување на некоја класа во која ќе ја имплементираме зависноста. Тогаш се пишуваат истанци за класите и се поврзуваат заедно преку интерфејсот на класата. Тука се поставува прашањето колку имплементации може да имплементираат во еден интерфејс? Одговорот е еден, но следува и прашањето како би го истетстирале сетоа тоа? Луѓето кој се занимаваат со оваа проблематика многу лесно го имплементираат тестираат кодот а тоа е блгодарение на вметнувањето и употребата на зависностите. Според моето истражување увидов дека вметнувањето на зависности (Dependency Injection) има огромен број на бенефити но тестирањето на кодот е главна предноста и карактеристика на оваа функционалсност и за тоа е доста употребувана од голем број на програмери, бидејќи го олеснува програмирањето и тестирањето на кодот. Добар тест = помалку грешки = добро код = лесен живот... Ивана Јованова 56

59 Истражувајќи за предностите на оваа зависност прочитав и увидов многу мислења и искуства од програмери, кој при нивната работа забележале голем бенефит од користење на Dependency Injection. Некои сметаат дека вметнувањето на зависност го олеснува начинот за управување помеѓу објектите. Многу е полесно да се прекине кохерентната функционалност во самиот интерфејс. Друг резултат при користење на зависност е дека може многу полесно да се види патот на дизајнот и подршката на Отворен-Затворен Принцип. Некои велат дека користењето на вметнувањето на зависност преставува менувач на игра тој огромен јаз на квалитет помеѓу пишувањето на код со него и без него. Самото искуство покажало дека со негово користење дошле до огромно подобување во пишување на квалитетот на кодот. Друг програмер вели дека придобивките од користење на оваа функционалност се повеќе политички отколку технички. Смета дека вметнувањето на зависност преставува алтернативна алатка на Сервис Локатор ништо повеќе. Друга предност е тоа што вметнувањето на зависност не бара никакви промени во кодот. Резултатот е тоа што клиентите се се повеќе независни и нивната изолација овозможува полесно тестирање на кодот. Вметнувањето на зависност овозможува клиентот да ги отстрани сите сознанија за конкретна имплементација. Ова помога да се изолира клиентот од влијание и промените на дефектите во дизајнот. Вметнувањето на зависност овозможува еднаков и самостоен развој. Двајца програмери можат самостојно да развијат класи кои ќе ги користат еден на друг, во која е потребно само да се знае кои интерјфејси на класата со која друга класа ќе комуницираат меѓу себе. Друг бенефит е што со користење на оваа фунционалност се намалува спојувањето помеѓу класата и нејзината зависност. Вметнувањето на зависност може да се направи целосно без да се употребува некоја платформа. 6. Петти дел Dependency Injection Во овој дел ќе го објаснам и демострирам процесот на вметнување на зависност. Како што спомнав погоре вметнувањето на зависност е процес во кој објектите ги дефинираат нивните зависности, а други објетки работат за нив се дефинираат и тоа преку конструктори, методи или сет од инстацата на објектот пред да биде креиран конструкторот или пред да врати некоја вредност методот. Како што спонав погоре Ивана Јованова 57

60 постојат две варијанти на вметнување на зависност. Конструктор базирано вметнување на зависност и Сет базирана зависност. Ќе набројам неколку разлики помеѓу користењето на Сеттер и Конструктор методите за вметнување на вредности. За да користиме Сеттер вметнување на зависност треба да користиме setdependency() метод, но за да користиме Конструктор метод потребно е само да направиме конструктор во апликацијата и преку него ќе вметнеме зависност. Втора разлика е читливоста на кодот. Бидејки со Сеттер методот користиме методи за вметнување на зависност, читливоста на кодот е полесна користејки ги Spring фајловите како aplicationcontext.xml. Бидејки секој сетер метод има име во зависност за што се употребува како на пример getreportservice() кој што ги чита репортите во Spring XML, и од самото име ќе имаме претпоставка за што се работи во кодот. Додека тоа во конструктор методот го нема, туку треба да се разгледа цела Java документација и да се анализира кодот што е напишан со овој метод. Друга разлика е тоа што Сетер методот не гарантира целосна зависност. Не може да гарантира дали секаде има вметнато зависност, што значи дека некои објекти се целосно независни. Додека со Констуктор методот не ни дозволува да изградиме објект ако вметнувањето на зависност не ни е целосно направено. Друга разлика е Безбедноста. Помала безбедност имаме со Сетер методот бидејќи може да се пропушти некоја зависност, а со Конструктор методот тоа не е возможно, бидејќи секогаш кога го повикуваме контрукторот за вметнување на зависност се креира нов објект кој ги наследува сите зависности кој што сме ги направиле. Покрај статистките што ги прочитав и искуствата од програмерите и кога би ги споредила разликите помеѓу овие два методи, подобар избор за користење на метод е Констурктор методот за вметнување на зависност, кој што ќе го применам во мојот магистерки труд. Во овој дел од темата ќе биде прикажана функција направена со Конструктор метод за зависност, која ќе доделува попуст од 5% на секој патник што ќе резервира карта по втор пат. Правиме класа Discount во која ќе ја направиме функцијата која ќе дава 5% попуст на секој патник кој повеќе од еднаш резервирал билет. Ивана Јованова 58

61 Понатаму правиме вметнување на зависност на класата Discount. Креираме нова класа која што се вика CallDiscount, во која ќе направиме констурктор кој што ќе инјектира кон класата Discount. Конструкторот на вметнување на зависност ќе се вика како класата CallDiscount и ќе ја повикува класата Discount. Со овој конструктор нема потреба да се пишува повторно истиот код кој што е напишан во класата Discount, со помош на контрукторот ќе ја повикаме. Со користење на вменување на завистност не мора да правиме нов објект за да пристапиме до класата нема потреба да се пишува и нов код туку со помош на конструкторот пристапуваме до класата. Со што си ја олеснуваме работата, непотребно не губиме време и намалуваме пишување на код. Ивана Јованова 59

62 Во discount.java видовме дека е напишана класа со DISCOUNT(попуст), во објектно ориентирано програмирање во секоја класа може да се напишат почетни вредности но и немора. Користењето на почетна вредност е добар начин на пишување на код бидејки воедно преставува и некоја заштита. Во нашиот пример велиме дека Discount од 5% ќе се чита од.xml фајлот и тоа ќе се прави со помош на конструктор од discount.java фајлот. Во Јава постојат параметарски и непараметарски конструктори и во секоја калса може да се пишуваат на безборј параметарски конструктори кои најчесто ќе се разликуваат според бројот на влезните параметри. Во нашиот случај користиме Конструктор со еден влезен параметар (Discount). Вредноста што ќе ја зададеме ќе ја читаме од. xml фајлот. Додека вредноста од xml фајлот ја читаме со помош на констукторот. Тоа го правиме во AplicationContext.xml фајлот каде што му задаваме вредност на конструкторот 5, тоа е вредноста на попустот што му ја доделуваме на секој патник што по втор пат ќе купи билет. Ивана Јованова 60

63 Во SummerController.java овозможуваме читање на вредноста од AplicationContext.xml фајлот. Покрај оваа функција која што е направена со Конструктор метод за вметнување на зависност во кодот е употребена зависност и во другите делови од кодот. Од причина да не се пишува премногу код, да не се креираат објекти во фолдерот Controller е искористена оваа функционалност за вметнување на зависности. Сите.java фајлови CompanyController.java, PesingerController.java,SummerController.java и CompanySummerController.java се направени со вметнување на зависност. Ивана Јованова 61

64 За пример ќе го разгледаме менито Company. Примерот е на сликата погоре. Кодот кој е обележан со црвено покажува дека повикуваме една класа во друга без да правиме нов објект. Во случајот правиме зависност помеѓу класата CompanyDAO. Во овој фолдер model.dao испишан е код за читање на податоци од база. Ивана Јованова 62

65 Додека читањето на податоци од база се прави преку код кој што е испишан во model.pojo. После читањето на записите од база кодот ги сместува во листа податоците. При конектирање со база, се креираат класи за работа со базата која што сме ја дефинирале претходно. Ги чита типовите на полињата од базата за секоја табела заедно со сетери и гетери. Како на сликата погоре. Ивана Јованова 63

66 7. Примена на Dependecy Injection во секојдневниот живот со соодветен пример Во претходниот дел ја направивме функцијата за попуст, односно направивме нов Dependency Injection, кој треба да го прикажеме во соодветен пример. За да најдеме примена на вметнувањето на зависност во секојдневниот живот треба да направиме соодветен пример со кој ќе ја прикажам неговата важност и примена во информатичката технологија. Ќе почнеме со креирање на веб апликација именувана како Wizzer, која ќе биде веб апликација во која ќе ја примениме функцијата за попуст. Апликацијата ќе биде направена во NeatBeans платформа во Spring Framework. Во оваа апликација ќе ја покажеме и доловиме функционалноста на вметнувањето на зависност, нејзината независнот, со што оваа функционалност за попуст ќе можат да ја превземат и други програмери и да ја применат во своите апликации. Овој проект е изработен со употреба на Spring и Hibernate. Во NeatBeans правиме проект кој ќе се вика Wizzer, како што ќе ни се вика самата апликацијата. Правиме нов проект, ставаме дека ќе работиме во Spring Framework и го креираме проектот за нашата веб страна. Ивана Јованова 64

67 Ивана Јованова 65

68 Во базата се искреирани табелите кои ни се потребни за креирање на проектот. Табелите се искреирани во My Sql. Креираме нова база која се вика Air_company, во која се креирани неколку табели. Ивана Јованова 66

69 Проектот го конектираме на база и кажуваме со кои табели ќе работиме. Во нашиот проект ни се потребни четири табели. Company Company_summer Pesinger Summer При изработка на овој проект користиме Hibernatе платформа. Во фајлот hibernate.cfg.xml, ги правиме основните подесувања за работа со бази на податоци. Се конектираме со базата, како е инсталирана дали е localhost, кој е username. При инсталирање на базата користено е пасворд кој што е наведен во кодот. Ивана Јованова 67

70 Во фајлот hibernate.reveng.xml наведуваме кои табели од базата ќе ги употребуваме во нашиот проект. Во нашиот проект ќе користиме четири табели кои се спонати погоре : Company, Summer, Company_summer и Pasinger. За добро да се организира проектот,и за да имаме добра прегледност и уреден код проектот е поделен на неколку фолдери, со кој ќе си го олесниме начинот на програмирање. Фолдерот classes - во овој фолдер напишана е класа за конекција со база. Ивана Јованова 68

71 Во фолдерот controller го пишуваме потребниот код за запишување и читање на податоци од база. Во фолдерот model.dao правиме прикажување на податоци од база. Испишан е код за читање на податоци од база. Читањето на податоци од база се прави преку кодот кој што е испишан во model.pojo., после читањето на записите од база кодот ги сместува во листа. Фолдерот model.pojo испишани се класи, за секоја табела од базата, овие класи најчесто се употребуваат за запишување или читање на записи од и во база. Ивана Јованова 69

72 Кога ќе се конектираме на база, се креираат класи за работа со базата, и ги чита типовите на полињата од базата за секоја табела заедно со сетери и гетери. Ивана Јованова 70

73 Понатаму го креираме дизајнот на страната. Креираме нови.jsp фајлови кои ни се потребни за изгледот на страната. Покрај главниот.jsp фајл кој го има во секој проект кој што се креира во NeatBeans index.jsp правиме и други.jsp фајлови кој ќе ни бидат потребни во самата апликација. Најчесто вметнувањето на зависност се прави на главниот index.jsp фајл. Во мојата апликација ќе направам повеќе.jsp фајлови кои ќе бидат потребни за изгледот на веб страната. Во оваа магистерска работа, веб страната ќе има повеќе менија, кои сите детално ќе бидат објаснам која е нивмната функција и за што се тие направени. Веб страната која што е направена во овој магистерки труд изгледа како на сликата погоре. Составена е од 4 менија : Companies CompanySummer Passenger Summer За изгледот на страната користени се и симнати готови HTML&CSS template кој го вметнуваме во фолдерот Web Pages. Ивана Јованова 71

74 Менито Companies е првото мени на веб страната. Кога ќе кликнеме на него, доле се појавува форма во која можеме да напишеме компаниите со кои патниците сакаат да летаат. Ќе ги внесеме податоците како адреса, град, телефон на компанијата и ќе кликнеме на копчето submit и во база ќе ја имаме компанијата која што сме ја запишале. Ивана Јованова 72

75 Бидејќи ќе имаме повеќе податоци за компании, сите податоци ќе бидат сместени во листа. Во мениот Passenger ќе има листа од патници кои се регистрирани во комапнијата и ќе може да се гледаат сите нивни податоци. За секој патник ќе има податоци за име, презиме,пасош, . Ивана Јованова 73

76 Бидејки имаме повеќе податоци, сите тие треба да бидат сместени во листа. Фајловите.jsp кој што ги имаме ги употребуваме за прикажување на табелите од базата на самата веб страна. Додека фајловите во фолдерот controller се употребуваат за повикување на соодветниот jsp фајл и прикажување на податоците кои се зачувани во листа. Ивана Јованова 74

77 При кликање на линкот New Passenger,ќе се појавува нова форма на веб страната секогаш кога ќе сакаме да регистрираме и запишеме нов клиент кој што сака да резервира лет. Оваа форма за запишување на податоци во база и читање на истите се прави во фолдерот controller->newpassengercontroller.java. Има линк new passenger во кој се исцртува форма за внес на Passport, Name, Surname и . Во неа го внесуваме патникот кој што сакаме да го имаме во база на податоци. Кога притискаме на копчето submit не носи на делот на страната каде што сакаме да ја видиме листата на патници. Сликата е код кој прикажува како се прави листа во јава. Во нашиот случај листа од патници, кои можеме да додаваме нови, да ги зачувуваме во база, да ги читаме и модифицираме потребните податоци. Ивана Јованова 75

78 Во фолдерот.dao правиме прикажување на сите записи од база од конкретната табела, при тоа запишувањето го правиме употребувајќи ја класата Pessenger.java. Ивана Јованова 76

79 Правиме листа за прикажување на сите рекорди од базата користејќи ги Passenger.java од фолдерот model.pojo. Користиме гетери и сетери за прикажување на податоците на самата веб страна. Менито Summer е слично на направено како менито Passenger и менито Companies. На ист принцип ги внесуваме локациите каде што сакаат да патуваат патниците. Имаме линк new summer каде што внесуваме места каде што ќе понудиме резервација на летови до тие места. Ивана Јованова 77

80 Правиме листа од сите полиња што ги имаме во табелата Summer, и кој треба да ги потполниме како City, Country, Date_from, Date_to. На ист начин како и во менито Патник ги прикажуваме и овие податоци во ова мени. До самото место има линк check. Таму го чекираме пасошот на патникот кој резервирал лет. Кога ќе кликнеме на линкот ни се отвара форма во која треба да ставиме број на пасош. Во полето ставаме пасош кој сме го внеле во база, односно патник кој веќе го имаме во нашата база на податоци. Потребно е два пати да внесеме Ивана Јованова 78

81 ист број на пасош за да ни се активира функцијата за попуст која е направена со вметнување на зависност. Во сликата погоре се гледа формата која што се појавува при кликање на линкот check. Во празното поле на формата треба да внесеме два пати ист број на пасош, тоа значи дека два пати ист патник купува карта и треба да му се додели попуст. Во полето Passpord ќе внесеме 123 и ќе кликнеме на копчето Check. Во менито Company Summer прикажуваме дали имаме попуст за тој патник или не. Откако ќе кликниме на копчето Ckeck во менито Summer, во менито Company Summer ни се прикажува сите патници што се чекирале и дали им е доделено 5% попуст на резервираната карта или не. Ако патникот е чекиран два пати треба апликацијата да му додели на тој патник попуст. Тоа може да се види во сликата подоле.треба да кликнеме на менито Company Summer да видиме дали е прикажан пасошот кој сме го чекирале и дали му е доделено попуст. Во менито ќе видиме дека е прикажан пасошот со број 123 дека резервирал билет но нема попуст за него. Ивана Јованова 79

82 Уште еднаш ако го чекираме истито број на пасош ќе треба да ни даде попуст со 5%, бидејќи клиентот по втор пат резервира билет во нашата компанија и за тоа му следува попуст. На сликата е прикажано дека пасошот со број 123 има 5% попуст, бидејки по втор пат резервира билет. Во првиот ред се гледа дека нема попуст, бидејќи само еднаш патникот си резервирал лет, но кога ќе резервира по втор пат автоматски се повикува функцијата и се доделува 5% попуст кое е обележано со црвено. Тука ја повикуваме функцијата која што е направена со Конструктор методот за вметнување на зависност. Повикувањето на функцијата го правиме во SummerControler.java од Controller фолдерот. Ивана Јованова 80

83 Како што е прикажано на сликата, проверуваме дали треба да му се додели одреден попуст на клиентот, ако тој се чекирал двапати треба да му се додели попуст, ако не нема да му се додели попуст од 5%. Потоа ги сместуваме во листа сите клиенти кој што чекирале билет без разлика дали им е доделено попуст или не. Ивана Јованова 81

84 8. Примена на готов Dependency Injection во апликација со употреба на.jar формат За да направиме примена на вметнување на зависности потребно е функцијата која што ја направивме да ја ставиме во некој формат во случајов во jar формат и потоа само со неколку чекори да ја вметнеме во нашата апликација без да пишуваме некаков код. Голема предност на вметнување на зависности како што кажав и во претходниот дел во овој магистерски труд е со тоа што, без никакво познавање од кодот и без пишување на код можеме да искористиме готов модел на вметнување на зависност и да го употребиме во апликацијата во која што ни треба. Таа позитивност која преставува и главна карактеристика на вметнувањето на зависност ќе ја прикажам во овој магистерски труд. Најпрво потребно да се направи jar фајл па потоа да се вметне во апликацијата во која што сакаме да ја искористиме функцијата која што ни е направема во зависноста односно доделување на попуст. Креиране нов фајл кој ќе го користиме DiscountJar. После креирањето на новиот проект потребно е да креираме фајл во кој ќе ја напишеме класата за пресметка на 5% попуст. Ивана Јованова 82

85 Правиме нова класа која ќе се вика Discount и после го пишуваме кодот за пресметката за попустот. Ивана Јованова 83

86 За да можеме да креираме JAR фајл потребно е да го компресираме во Compress JAR File. Потоа го извршуваме проектот за да прегледаме дали точно работи. Откако ќе ги поминеме овие постапки, сме го креирале jar фајл-от. Понатаму треба да наравиме импелементација на овој фајл во некоја апликација. За да го направиме тоа, треба да ја повториме постапката. Да креираме уште еден проект UsingJar. Ивана Јованова 84

87 Откако ќе ја повториме постапката,од претходниот проект го земаме DiscountJAR.jar file го поставуваме во новиот проект usingjar во директориумот lib. Потребно е во Library директориумот да го додадеме повторно JAR фајлот. Преку Add JAR/Folder менито. Со овој чекор имплементиран е јар фајлот во новиот проект. Кој можеме да го видиме на сликата. Ивана Јованова 85

88 Сега е потребно да се направат одредени прилагодувања за да може овој јар фајл да се стартува во овој проект. Потребно е повторно да влеземе во проектот и да го отвориме ЈАР фајлот. Ивана Јованова 86

89 Откако ќе го отвориме овој фајл во било кој текст едитор можеме да го забележиме следното: Manifest-Version: 1.0 Ant-Version: Apache Ant Created-By: 1.8.0_45-b15 (Oracle Corporation) Class-Path: X-COMMENT: Main-Class will be added automatically by build Main-Class: discountjar.discountjar Потребно е да се внесe патеката каде е сместeн јар фајлот. Manifest-Version: 1.0 Ant-Version: Apache Ant Created-By: 1.8.0_45-b15 (Oracle Corporation) Class-Path: lib/ DiscountJAR.jar X-COMMENT: Main-Class will be added automatically by build Main-Class: discountjar.discountjar Ивана Јованова 87

90 Ја внесуваме патеката и со ова постапка овозможивме употреба на класата DISCOUNT од ЈАР фајлот. Сега можеме да направиме тестирање на проектот дали ги дава посакуваните резултати. Задаваме некоја вредност од 1000, и со извршување на проектот ќе видиме дека апликацијата ќе ни додели 5 % попуст, односно ќе ни даде 950 со што успешно сме го имплементирале jar фајлот. Со креирање на целиот овој проект, додавање на jar фајлот заклучивме дека функцијата ни функционира, ја истестиравме функционалноста на вметнување на зависност и сега можеме да ја имплементираме во нашиот проект односно во веб апликацијата Wizzer. На истион начин го иплементираме jar Wizzer проектот. Го копираме фајлот во овој проект. Ивана Јованова 88

91 Ги правиме подесувањата што ни се потребни и овој jar фајл е имплементиран во нашата апликација. Посакуваната цел и целта на овој магистерски труд е постигната. Со неколку чекори и со некои подесувања кој се потребни за овој фајл да се имплементира во апликација се направени. Ја докажавме најголемата предноста на оваа функционалност а тоа што не пишувавме никаков код, програмерот нема потреба да биде запознаен со суштината на кодот туку само да ги направи овие неколку подесувања со цел да го импелентира Ивана Јованова 89

Структурно програмирање

Структурно програмирање Аудиториски вежби 1 Верзија 1.0, 20 Септември, 2016 Содржина 1. Околини за развој.......................................................... 1 1.1. Околини за развој (Integrated Development Environment

More information

Дизајнирање на архитектура на микросервиси: развој на бот базиран микросервис за управување со анкети

Дизајнирање на архитектура на микросервиси: развој на бот базиран микросервис за управување со анкети Универзитет Св. Климент Охридски - Битола Факултет за информатички и комуникациски технологии Битола Отсек за информатика и компкутерска техника Дизајнирање на архитектура на микросервиси: развој на бот

More information

Вовед во мрежата nbn. Што е тоа австралиска nbn мрежа? Што ќе се случи? Како да се префрлите на мрежата nbn. Што друго ќе биде засегнато?

Вовед во мрежата nbn. Што е тоа австралиска nbn мрежа? Што ќе се случи? Како да се префрлите на мрежата nbn. Што друго ќе биде засегнато? Вовед во мрежата nbn 1 Што е тоа австралиска nbn мрежа? 2 Што ќе се случи? 3 Како да се префрлите на мрежата nbn 4 Што друго ќе биде засегнато? 5 Што треба следно да сторите 1 Што е тоа австралиска nbn

More information

Март Opinion research & Communications

Март Opinion research & Communications Март 2014 Opinion research & Communications Метод: Телефонска анкета Примерок: 800 испитаници кои следат македонски спорт стратификуван со репрезентативен опфат на сите етнички заедници, урбани и рурални

More information

УПАТСТВО. Како да започнам со користење на сертификат издаден на Gemalto IDPrime PKI токен во Mozilla Firefox?

УПАТСТВО. Како да започнам со користење на сертификат издаден на Gemalto IDPrime PKI токен во Mozilla Firefox? УПАТСТВО Како да започнам со користење на сертификат издаден на Gemalto IDPrime PKI токен во Mozilla Firefox? Верзија: 4.0 Датум: 18.01.2018 103.29 КИБС АД Скопје 2018 КИБС АД Скопје, сите права задржани

More information

Преземање сертификат користејќи Mozilla Firefox

Преземање сертификат користејќи Mozilla Firefox УПАТСТВО Преземање сертификат користејќи Mozilla Firefox Верзија: 4.0 Датум: 10.01.2018 103.11 КИБС АД Скопје 2017 КИБС АД Скопје, сите права задржани http://www.kibstrust.mk Содржина 1. Како да го преземам

More information

ЕНаука.мк 1 милион Сајт на годината ( Образование, Наука и Култура )

ЕНаука.мк 1 милион Сајт на годината ( Образование, Наука и Култура ) Инфо ЕНаука.мк е единствениoт интернет пoртал вo Р.Македoнија кoј ги следи и пренесува најактуелните нoвoсти, истражувања и достигнувања во повеќе научни области. Главни цели на порталот се враќање на

More information

Коисмение.Штозначиме.

Коисмение.Штозначиме. Коисмение.Штозначиме. Исто како стоките и податоците, така GW ги движи и луѓето кои доаѓаат во контакт со портокаловата мрежа, внатрешно или надворешно. Ние се движиме напред со нашите клиенти, со напреден

More information

Siemens собни термостати. За максимален комфорт и енергетска ефикасност. siemens.com/seeteam

Siemens собни термостати. За максимален комфорт и енергетска ефикасност. siemens.com/seeteam . За максимален комфорт и енергетска ефикасност siemens.com/seeteam 1 СОБНИ ТЕРМОСТАТИ ЗА ФЕНКОЈЛЕРИ RAB11 / RAB21 / RAB31 СОБЕН ТЕРМОСТАТ ЗА ФЕНКОЈЛЕРИ RDF110.2 / RDF110 / RDF110/IR RAB11 Електромеханички

More information

м-р Марјан Пејовски Сектор за регулатива

м-р Марјан Пејовски Сектор за регулатива Трета анализа на пазар за Физички пристап до мрежна инфраструктура (целосен и поделен разврзан пристап) на фиксна локација и четврта анализа на пазар за услуги со широк опсег м-р Марјан Пејовски Сектор

More information

Универзитет за туризам и менаџмент во Скопје 2014/2015. Проф. д-р Сашо Кожухаров

Универзитет за туризам и менаџмент во Скопје 2014/2015. Проф. д-р Сашо Кожухаров Универзитет за туризам и менаџмент во Скопје 2014/2015 Проф. д-р Сашо Кожухаров Детерминирање на менаџирањето на ризикот Процес на менаџирање на ризикот Одлучување и донесување одлуки Системи за поддржувањето

More information

ISA SERVER - ПОЛИТИКИ ЗА РЕГУЛИРАЊЕ НА ИНТЕРНЕТ СООБРАЌАЈ ВО МРЕЖИ Јасминка Сукаровска Костадиновска, Доц Др.Сашо Гелев

ISA SERVER - ПОЛИТИКИ ЗА РЕГУЛИРАЊЕ НА ИНТЕРНЕТ СООБРАЌАЈ ВО МРЕЖИ Јасминка Сукаровска Костадиновска, Доц Др.Сашо Гелев УДК: 004.738.056.057.4 ISA SERVER - ПОЛИТИКИ ЗА РЕГУЛИРАЊЕ НА ИНТЕРНЕТ СООБРАЌАЈ ВО МРЕЖИ Јасминка Сукаровска Костадиновска, Доц Др.Сашо Гелев 1 Европски Универзитет Скопје, Р. Македонија, sukarovska.jasminka@live.eurm.edu.mk

More information

Биланс на приходи и расходи

Биланс на приходи и расходи 1 of 5 06.03.2016 12:00 ЕМБС: 05196248 Целосно име: Здружение за советување,лекување,реинтеграција и ресоцијализација на лица зависни од психоактивни супстанции ИЗБОР-Струмица Вид на работа: 540 Тип на

More information

Биланс на приходи и расходи

Биланс на приходи и расходи 1 of 5 28.02.2015 23:20 ЕМБС: 05196248 Целосно име: Здружение за советување,лекување,реинтеграција и ресоцијализација на лица зависни од психоактивни супстанции ИЗБОР-Струмица Вид на работа: 540 Тип на

More information

Односот помеѓу интерната и екстерната ревизија. Презентира: Верица Костова

Односот помеѓу интерната и екстерната ревизија. Презентира: Верица Костова Односот помеѓу интерната и екстерната ревизија Презентира: Верица Костова Што е ревизија http://www.youtube.com/watch?v=rjmgrdjhufs&sns=em Регулирање на внатрешната ревизија Закон за банки Закон за супервизија

More information

Апстракт Вовед Цели и методологија на изработка на магистерскиот труд Cloud технологии и нивната примена во бизнисите...

Апстракт Вовед Цели и методологија на изработка на магистерскиот труд Cloud технологии и нивната примена во бизнисите... СОДРЖИНА Апстракт... 5 Вовед... 7 Цели и методологија на изработка на магистерскиот труд... 8 Глава 1: 1. Cloud технологии и нивната примена во бизнисите... 9 1.1 Cloud технологија и нејзиниот развој...

More information

За обуката ВОВЕД ВО НОВИОТ ПРЕДМЕТ

За обуката ВОВЕД ВО НОВИОТ ПРЕДМЕТ За обуката ВОВЕД ВО НОВИОТ ПРЕДМЕТ Распоред на активности 10.00-11.30 прв блок часови 11.30-11.40 пауза 11.40 13.10 втор блок часови 13.10 13.50 пауза за ручек 13.50 15.20 трет блок часови 15.20 15.30

More information

ПРОМЕНИ ВО РАКОВОДЕЊЕТО НА ОРГАНИЗАЦИЈА ЧИЈА ОСНОВНА ДЕЈНОСТ Е ИНЖЕНЕРИНГ

ПРОМЕНИ ВО РАКОВОДЕЊЕТО НА ОРГАНИЗАЦИЈА ЧИЈА ОСНОВНА ДЕЈНОСТ Е ИНЖЕНЕРИНГ 6. СОВЕТУВАЊЕ Охрид, 4-6 октомври 2009 Игор Трајковски, дипл.ел.инг. NETRA ltd. Telecommunication engineering, Скопје Проф.д-р. Атанас Илиев, дипл.ел.инг. ФЕИТ, Скопје ПРОМЕНИ ВО РАКОВОДЕЊЕТО НА ОРГАНИЗАЦИЈА

More information

ПОИМ ЗА КОМПЈУТЕРСКИ МРЕЖИ КАРАКТЕРИСТИКИ НА КОМПЈУТЕРСКИТЕ МРЕЖИ

ПОИМ ЗА КОМПЈУТЕРСКИ МРЕЖИ КАРАКТЕРИСТИКИ НА КОМПЈУТЕРСКИТЕ МРЕЖИ ПОИМ ЗА КОМПЈУТЕРСКИ МРЕЖИ КАРАКТЕРИСТИКИ НА КОМПЈУТЕРСКИТЕ МРЕЖИ 1. Компјутерски мрежи Компјутерска мрежа претставува збир од два или повеќе компјутери кои се поврзани преку комуникациски медиум и кои

More information

ФОНД ЗА ЗДРАВСТВЕНО ОСИГУРУВАЊЕ НА МАКЕДОНИЈА ПРИРАЧНИК ЗА РАБОТА СО МОДУЛОТ ПОДНЕСУВАЊЕ НА БАРАЊЕ ЗА БОЛЕДУВАЊЕ ПРЕКУ ПОРТАЛОТ НА ФЗОМ

ФОНД ЗА ЗДРАВСТВЕНО ОСИГУРУВАЊЕ НА МАКЕДОНИЈА ПРИРАЧНИК ЗА РАБОТА СО МОДУЛОТ ПОДНЕСУВАЊЕ НА БАРАЊЕ ЗА БОЛЕДУВАЊЕ ПРЕКУ ПОРТАЛОТ НА ФЗОМ ФОНД ЗА ЗДРАВСТВЕНО ОСИГУРУВАЊЕ НА МАКЕДОНИЈА ПРИРАЧНИК ЗА РАБОТА СО МОДУЛОТ ПОДНЕСУВАЊЕ НА БАРАЊЕ ЗА БОЛЕДУВАЊЕ ПРЕКУ ПОРТАЛОТ НА ФЗОМ Скопје, март 2015 година Содржина 1 Процес на поднесување на барање

More information

ФАКУЛТЕТ ЗА ЕЛЕКТРОТЕХНИКА И ИНФОРМАЦИСКИ ТЕХНОЛОГИИ АВТОМАТСКА КОМПОЗИЦИЈА НА СЕМАНТИЧКИ ВЕБ СЕРВИСИ

ФАКУЛТЕТ ЗА ЕЛЕКТРОТЕХНИКА И ИНФОРМАЦИСКИ ТЕХНОЛОГИИ АВТОМАТСКА КОМПОЗИЦИЈА НА СЕМАНТИЧКИ ВЕБ СЕРВИСИ Универзитет,,Св. Кирил и Методиј ФАКУЛТЕТ ЗА ЕЛЕКТРОТЕХНИКА И ИНФОРМАЦИСКИ ТЕХНОЛОГИИ Институт за компјутерска техника и информатика Милош Јовановиќ АВТОМАТСКА КОМПОЗИЦИЈА НА СЕМАНТИЧКИ ВЕБ СЕРВИСИ -магистерски

More information

Универзитет Св. Климент Охридски Битола Факултет за Информатички и Комуникациски Технологии. студиска програма

Универзитет Св. Климент Охридски Битола Факултет за Информатички и Комуникациски Технологии. студиска програма Универзитет Св. Климент Охридски Битола Факултет за Информатички и Комуникациски Технологии студиска програма Инженерство и менаџмент на софтверски апликации Магистерски труд Microsoft алатките за веб

More information

1. Наслов на наставниот предмет Имплементација на системи со отворен код. Implementation of open source systems. 7. Број на ЕКТС кредити

1. Наслов на наставниот предмет Имплементација на системи со отворен код. Implementation of open source systems. 7. Број на ЕКТС кредити 1. Наслов на наставниот предмет Имплементација на системи со отворен код Implementation of open source systems 2. Код CSEW514 3. Студиска програма ИКИ, КНИ, ЕТ 4. Организатор на студиската програма (единица,

More information

A mysterious meeting. (Таинствена средба) Macedonian. List of characters. (Личности) Khalid, the birthday boy

A mysterious meeting. (Таинствена средба) Macedonian. List of characters. (Личности) Khalid, the birthday boy (Таинствена средба) List of characters (Личности) Khalid, the birthday boy (Калид, момчето на кое му е роденден) Leila, the mysterious girl and phone voice (Лејла, таинственото девојче и гласот на телефон)

More information

ЛИСТА НА ЛЕКОВИ КОИ ПАЃААТ НА ТОВАР НА ФОНДОТ ЗА ЗДРАВСТВЕНО ОСИГУРУВАЊЕ НА МАКЕДОНИЈА

ЛИСТА НА ЛЕКОВИ КОИ ПАЃААТ НА ТОВАР НА ФОНДОТ ЗА ЗДРАВСТВЕНО ОСИГУРУВАЊЕ НА МАКЕДОНИЈА Врз основа на член 9 став 1а точка 8 и став 1в точка 2 и член 56 став 1 точка 3 од Законот за здравственото осигурување ( Службен весник на РМ бр. 25/2000, 34/2000, 96/2000, 50/2001, 11/2002, 31/2003,

More information

УПАТСТВО ЗА КОРИСТЕЊЕ НА СИСТЕМОТ ЗА ЕЛЕКТРОНСКО БАНКАРСТВО КОРПОРАТИВНО

УПАТСТВО ЗА КОРИСТЕЊЕ НА СИСТЕМОТ ЗА ЕЛЕКТРОНСКО БАНКАРСТВО КОРПОРАТИВНО УПАТСТВО ЗА КОРИСТЕЊЕ НА СИСТЕМОТ ЗА ЕЛЕКТРОНСКО БАНКАРСТВО КОРПОРАТИВНО Содржина: - Најава на системот...2 1. Сметки...3 2. Провизии...5 3. Курсна листа...5 4. Плаќања...6 НАЈАВА НА СИСТЕМОТ По добивањето

More information

Универзитет Гоце Делчев - Штип. Факултет за информатика. Катедра за софтверско инженерство ЗОРАН МИЛЕВСКИ ЕДУКАТИВНО ПОДАТОЧНО РУДАРЕЊЕ СО MOODLE 2.

Универзитет Гоце Делчев - Штип. Факултет за информатика. Катедра за софтверско инженерство ЗОРАН МИЛЕВСКИ ЕДУКАТИВНО ПОДАТОЧНО РУДАРЕЊЕ СО MOODLE 2. Универзитет Гоце Делчев - Штип Факултет за информатика Катедра за софтверско инженерство ЗОРАН МИЛЕВСКИ ЕДУКАТИВНО ПОДАТОЧНО РУДАРЕЊЕ СО MOODLE 2.4 -МАГИСТЕРСКИ ТРУД- Штип, јули 2015 Комисија за оценка

More information

МОДЕЛИ И ТЕХНИКИ НА ГРУПНО ОДЛУЧУВАЊЕ И НИВНАТА ПРИМЕНА ВО ДЕЛОВНИТЕ СУБЈЕКТИ ОД ПЕЛАГОНИСКИОТ РЕГИОН

МОДЕЛИ И ТЕХНИКИ НА ГРУПНО ОДЛУЧУВАЊЕ И НИВНАТА ПРИМЕНА ВО ДЕЛОВНИТЕ СУБЈЕКТИ ОД ПЕЛАГОНИСКИОТ РЕГИОН У Н И В Е Р З И Т Е Т С В. К Л И М Е Н Т О Х Р И Д С К И Е К О Н О М С К И Ф А К У Л Т Е Т П Р И Л Е П МОДЕЛИ И ТЕХНИКИ НА ГРУПНО ОДЛУЧУВАЊЕ И НИВНАТА ПРИМЕНА ВО ДЕЛОВНИТЕ СУБЈЕКТИ ОД ПЕЛАГОНИСКИОТ РЕГИОН

More information

Advanced databases. Факултет за информатички науки и компјутерско инженерство ФИНКИ. 7. Број на ЕКТС кредити. Бази на податоци

Advanced databases. Факултет за информатички науки и компјутерско инженерство ФИНКИ. 7. Број на ЕКТС кредити. Бази на податоци 1. Наслов на наставниот предмет Напредни бази на податоци Advanced databases 2. Код CSES619 3 Студиска прогама КНИ, ЕТ,АСИ 4. Организатор на студиската програма (единица, односно институт, катедра, оддел)

More information

УПАТСТВО. Kористење безбедно средство за електронско потпишување на Gemalto (PKI Smart Card и PKI Token)

УПАТСТВО. Kористење безбедно средство за електронско потпишување на Gemalto (PKI Smart Card и PKI Token) УПАТСТВО Kористење безбедно средство за електронско потпишување на Gemalto (PKI Smart Card и PKI Token) Верзија: 3.0 Датум: 26.04.2012 КИБС АД Скопје 2012 КИБС АД Скопје, сите права задржани http://ca.kibs.com.mk

More information

Современи науки и технологии. Дипломиран по компјутерски науки

Современи науки и технологии. Дипломиран по компјутерски науки Study program Факултет Циклус на студии Компјутерски науки Современи науки и технологии Прв циклус (Додипломски) ЕКТС 180 Титула Дипломиран по компјутерски науки Архивски број [180] 03-680/2 Accreditation

More information

МОДЕЛИРАЊЕ И ЕВАЛУАЦИЈА НА ПЕРФОРМАНСИТЕ НА СИСТЕМИТЕ НА БИЗНИС ИНТЕЛИГЕНЦИЈА ВО КОМПАНИИТЕ

МОДЕЛИРАЊЕ И ЕВАЛУАЦИЈА НА ПЕРФОРМАНСИТЕ НА СИСТЕМИТЕ НА БИЗНИС ИНТЕЛИГЕНЦИЈА ВО КОМПАНИИТЕ Универзитет Св. Климент Охридски - Битола Економски факултет - Прилеп Дејан Здравески, м-р. МОДЕЛИРАЊЕ И ЕВАЛУАЦИЈА НА ПЕРФОРМАНСИТЕ НА СИСТЕМИТЕ НА БИЗНИС ИНТЕЛИГЕНЦИЈА ВО КОМПАНИИТЕ - ДОКТОРСКА ДИСЕРТАЦИЈА

More information

Бизнис информатика. Современи науки и технологии. Магистер по компјуерски науки / Oбласт: Бизнис информатика

Бизнис информатика. Современи науки и технологии. Магистер по компјуерски науки / Oбласт: Бизнис информатика Study program Факултет Циклус на студии Бизнис информатика Современи науки и технологии Втор циклус (Постдипломски) ЕКТС 120 Титула Магистер по компјуерски науки / Oбласт: Бизнис информатика Архивски број

More information

ПЕТТО СОВЕТУВАЊЕ. Охрид, 7 9 октомври 2007 SCADA - КОМПОНЕНТА НА ДИСПЕЧЕРСКИ ТРЕНИНГ СИМУЛАТОР

ПЕТТО СОВЕТУВАЊЕ. Охрид, 7 9 октомври 2007 SCADA - КОМПОНЕНТА НА ДИСПЕЧЕРСКИ ТРЕНИНГ СИМУЛАТОР ПЕТТО СОВЕТУВАЊЕ Охрид, 7 9 октомври 2007 Асс. Сања Велева Трпевска Евица Проф. д-р Марија Кацарска Факултет за електротехника и информациски технологии, Скопје SCADA - КОМПОНЕНТА НА ДИСПЕЧЕРСКИ ТРЕНИНГ

More information

ИЗРАБОТКА НА JLEGO БИБЛИОТЕКА ЗА РАЗВИВАЊЕ НА ANDROID АПЛИКАЦИИ ЗА КОМУНИКАЦИЈА И УПРАВУВАЊЕ НА LEGO NXT РОБОТСКИ СИСТЕМ

ИЗРАБОТКА НА JLEGO БИБЛИОТЕКА ЗА РАЗВИВАЊЕ НА ANDROID АПЛИКАЦИИ ЗА КОМУНИКАЦИЈА И УПРАВУВАЊЕ НА LEGO NXT РОБОТСКИ СИСТЕМ Универзитет Св. Климент Охридски - Битола Технички Факултет Битола ИЗРАБОТКА НА JLEGO БИБЛИОТЕКА ЗА РАЗВИВАЊЕ НА ANDROID АПЛИКАЦИИ ЗА КОМУНИКАЦИЈА И УПРАВУВАЊЕ НА LEGO NXT РОБОТСКИ СИСТЕМ - МАГИСТЕРСКИ

More information

Структурирани бази на наставни материјали и дигитална трансформација. студија на случај Република Македонија

Структурирани бази на наставни материјали и дигитална трансформација. студија на случај Република Македонија Структурирани бази на наставни материјали и дигитална трансформација 2 Содржина Листа на табели... 7 Листа на графикони... 10 1. ВОВЕД... 11 1. 1. Мотивација, предмет и цел на истражувањето... 11 1. 2.

More information

Упатство за инсталација на Gemalto.NET токен во Mozilla Firefox

Упатство за инсталација на Gemalto.NET токен во Mozilla Firefox Упатство за инсталација на Gemalto.NET токен во Mozilla Firefox Содржина Воведни препораки... 3 1. Подесување на Trust... 4 2. Инсталација на софтвер за Gemalto.NET токен... 5 3А. Инсталирање на драјвери

More information

Обука за електронски систем на учење МИКРОУЧЕЊЕ. Материјал за учесници

Обука за електронски систем на учење МИКРОУЧЕЊЕ. Материјал за учесници MIOA301-P5-Z2 Министерство за информатичко општество и администрација Обука за електронски систем на учење МИКРОУЧЕЊЕ Овој материјал е изработен од страна на Министерството за информатичко општество и

More information

МАГИСТЕРСКИ ТРУД АНАЛИЗА НА ПЕРФОРМАНСИТЕ НА КОНЦЕПТОТ Е-ВЛАДА ВО РЕПУБЛИКА МАКЕДОНИЈА

МАГИСТЕРСКИ ТРУД АНАЛИЗА НА ПЕРФОРМАНСИТЕ НА КОНЦЕПТОТ Е-ВЛАДА ВО РЕПУБЛИКА МАКЕДОНИЈА Универзитет Св. Климент Охридски - Битола ЕКОНОМСКИ ФАКУЛТЕТ ПРИЛЕП МАГИСТЕРСКИ ТРУД АНАЛИЗА НА ПЕРФОРМАНСИТЕ НА КОНЦЕПТОТ Е-ВЛАДА ВО РЕПУБЛИКА МАКЕДОНИЈА Ментор: Проф. д-р Марјан Ангелески Кандидат: Прилеп

More information

на јавната свест за Архуска конвенција и еколошкото законодавство на Европската Унија

на јавната свест за Архуска конвенција и еколошкото законодавство на Европската Унија Анализа на наоди од истражување на јавната свест за Архуска конвенција и еколошкото законодавство на Европската Унија Justice and Environment 2013 a Udolni 33, 602 00, Brno, CZ e info@justiceandenvironment.org

More information

МАГИСТЕРСКИ ТРУД. Значењето на е-crm за остварување на конкурентска предност на компаниите

МАГИСТЕРСКИ ТРУД. Значењето на е-crm за остварување на конкурентска предност на компаниите МАГИСТЕРСКИ ТРУД Значењето на е-crm за остварување на Кандидат Вршкоска Лидија Ментор Проф.Д-р.Маргарита Јанеска Прилеп, јуни, 2014 Содржина Вовед... 4 1.Предмет, цели и методологија на истражување...

More information

Преземање сертификат користејќи Internet Explorer

Преземање сертификат користејќи Internet Explorer УПАТСТВО Преземање сертификат користејќи Internet Explorer Верзија: 4.0 Датум: 09.01.2018 103.10 КИБС АД Скопје 2017 КИБС АД Скопје, сите права задржани http://www.kibstrust.mk Содржина 1. Подготовка за

More information

Развојот и примената на UBUNTU оперативниот систем

Развојот и примената на UBUNTU оперативниот систем ФОН УНИВЕРЗИТЕТ ФАКУЛТЕТ ЗА ИНФОРМАЦИСКО-КОМУНИКАЦИСКИ ТЕХНОЛОГИИ Развојот и примената на UBUNTU оперативниот систем Семинарски труд КОМПЈУТЕРСКИ АЛАТКИ Ментор: Проф. Д-р Симе Арсеновски Студент: Влатко

More information

БАРAЊE ЗА ИЗДАВАЊЕ/ПРОДОЛЖУВАЊЕ НА ДОЗВОЛА ЗА ПРИВРЕМЕН ПРЕСТОЈ APPLICATION FOR ISSUE/EXTENSION OF TEMPORARY RESIDENCE PERMIT

БАРAЊE ЗА ИЗДАВАЊЕ/ПРОДОЛЖУВАЊЕ НА ДОЗВОЛА ЗА ПРИВРЕМЕН ПРЕСТОЈ APPLICATION FOR ISSUE/EXTENSION OF TEMPORARY RESIDENCE PERMIT Образец бр.2 Назив на органот до кој барањето се поднесува Name of the receiving authority Priemen штембил Stamp of receipt БАРAЊE ЗА ИЗДАВАЊЕ/ПРОДОЛЖУВАЊЕ НА ДОЗВОЛА ЗА ПРИВРЕМЕН ПРЕСТОЈ APPLICATION FOR

More information

ИНТЕРНЕТ ТЕХНОЛОГИИ ПРЕНОС НА ПОДАТОЦИ

ИНТЕРНЕТ ТЕХНОЛОГИИ ПРЕНОС НА ПОДАТОЦИ ИНТЕРНЕТ ТЕХНОЛОГИИ ПРЕНОС НА ПОДАТОЦИ Доц. д-р Иван Краљевски ПРЕНОС НА ПОДАТОЦИ FTP FTP (File Transfer Protocol) протокол за пренос на датотеки. Преземањето на датотеки (Down-Load) е само еден дел од

More information

15.1. Предавања теоретска настава 30 часови активности

15.1. Предавања теоретска настава 30 часови активности 1. Наслов на наставниот предмет Програмирање и алгоритми 2. Код. Студиска програма Сите студиски програми 4. Организатор на студиската програма Факултет за електротехника и информациски технологии 5. Степен

More information

2015/16 ИНФОРМАТИЧКИ НАУКИ И КОМУНИКАЦИСКО ИНЖЕНЕРСТВО

2015/16 ИНФОРМАТИЧКИ НАУКИ И КОМУНИКАЦИСКО ИНЖЕНЕРСТВО ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ И КОМУНИКАЦИСКИ ТЕХНОЛОГИИ Б И Т О Л А 2015/16 ИНФОРМАТИЧКИ НАУКИ И КОМУНИКАЦИСКО ИНЖЕНЕРСТВО четиригодишни академски студии од прв циклус (240 ) со 9 различни профили на специјализација/диференцијација

More information

ПРИРАЧНИК ЗА ПРОЕКТЕН МЕНАЏМЕНТ

ПРИРАЧНИК ЗА ПРОЕКТЕН МЕНАЏМЕНТ ОБУКА ЗА ПРИРАЧНИК ЗА (пример од глава I) Предавач: Андријана Богдановска Ѓуровиќ KNOWLEDGE CENTER, 2011 ГЛАВА 1 ВОВЕД И КОНЦЕПТ НА ПРОЕКТНИОТ МЕНАЏМЕНТ Цели Целта на воведот е даде преглед на проектниот

More information

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ФАКУЛТЕТ ЗА ИНФОРМАТИКА Информациски технологии Штип

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ФАКУЛТЕТ ЗА ИНФОРМАТИКА Информациски технологии Штип УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ФАКУЛТЕТ ЗА ИНФОРМАТИКА Информациски технологии Штип ЃОРЃЕ ГИЧЕВ НАПРЕДНО ПРЕБАРУВАЊЕ ИНФОРМАЦИИ КАЈ ERP АПЛИКАЦИИ - МАГИСТЕРСКИ ТРУД - Штип, Јули 2014 КОМИСИЈА ЗА ОЦЕНКА И

More information

Зошто ни е потребен слободниот пристап до информации од јавен карактер и што претставува овој концепт?

Зошто ни е потребен слободниот пристап до информации од јавен карактер и што претставува овој концепт? ,,Secrecy, being an instrument of conspiracy, ought never to be the system of a regular government. Зошто ни е потребен слободниот пристап до информации од јавен карактер и што претставува овој концепт?

More information

Дизајн и имплементација на модул за извештаи и администрација на СМС систем за паркирање

Дизајн и имплементација на модул за извештаи и администрација на СМС систем за паркирање Универзитет Св. Климент Охридски Битола Факултет за информатички и комуникациски технологии - Битола Дизајн и имплементација на модул за извештаи и администрација на СМС систем за паркирање -Магистерски

More information

Имплементација и користење на JDF

Имплементација и користење на JDF Универзитет Св. Климент Охридски - Битола ТЕХНИЧКИ ФАКУЛТЕТ - Факултет за информатички и комуникациски технологии - Тема: Имплементација и користење на JDF - Job Definition Formatстандард во печатарската

More information

Ф а б р и ч е н п л и н с к и у р е д

Ф а б р и ч е н п л и н с к и у р е д Ф а б р и ч е н п л и н с к и у р е д Вовед Возилата GREAT WALL со бензински мотори можат да бидат дополнително опремени со фабрички гасен уред со течно вбризгување на горивото (Liquid Propane Injection

More information

РЕПУБЛИКА МАКЕДОНИЈА. Универзитет Св. Климент Охридски Битола. Економски факултет - Прилеп

РЕПУБЛИКА МАКЕДОНИЈА. Универзитет Св. Климент Охридски Битола. Економски факултет - Прилеп РЕПУБЛИКА МАКЕДОНИЈА Универзитет Св. Климент Охридски Битола Економски факултет - Прилеп КВАЛИТЕТ НА УСЛУГИТЕ ЗА МОБИЛНА ТЕЛЕФОНИЈА И МОБИЛЕН МАРКЕТИНГ ВО РЕПУБЛИКА МАКЕДОНИЈА -магистерски труд - Кандидат:

More information

КАРАКТЕРОТ НА МЕНАЏМЕНТОТ

КАРАКТЕРОТ НА МЕНАЏМЕНТОТ м-р Весна Гроздановска UDK/UDK 005 КАРАКТЕРОТ НА МЕНАЏМЕНТОТ ВОВЕД Менаџментот е создавање и одржување на систем. Компаниите зависат од можностите на менаџерите да постават визија на организацијата и да

More information

ИНТЕРНЕТ ТЕХНОЛОГИИ. Доц. д-р Иван Краљевски. Врските помеѓу локациите на Интернетот, (патеките) претставуваат комуникациски врски.

ИНТЕРНЕТ ТЕХНОЛОГИИ. Доц. д-р Иван Краљевски. Врските помеѓу локациите на Интернетот, (патеките) претставуваат комуникациски врски. ИНТЕРНЕТ ТЕХНОЛОГИИ ТЕХНИЧКИ АСПЕКТИ НА ИНТЕРНЕТOT Доц. д-р Иван Краљевски ТЕХНИЧКИ АСПЕКТИ НА ИНТЕРНЕТ ИНТЕРНЕТ СТРУКТУРА И ОРГАНИЗАЦИЈА Врските помеѓу локациите на Интернетот, (патеките) претставуваат

More information

Algorithms and Data Structures. 7. Број на ЕКТС кредити

Algorithms and Data Structures. 7. Број на ЕКТС кредити 1. Наслов на наставниот предмет Алгоритми и податочни структури Algorithms and Data Structures 2. Код CSEW301 3. Студиска програма 4. Организатор на студиската програма (единица, односно институт, катедра,

More information

Современи науки и технологии. Магистер по компјутерски науки / Насока: Информациски системи

Современи науки и технологии. Магистер по компјутерски науки / Насока: Информациски системи Study program Факултет Циклус на студии Компјутерски науки Современи науки и технологии Втор циклус (Постдипломски) ЕКТС 120 Титула Магистер по компјутерски науки / Насока: Информациски системи Архивски

More information

Стојанче Спасов ВЕБ СЕРВИС ЗА ПОВЕЌЕЗНАЧНА ТРАНСЛИТЕРАЦИЈА НА ЦЕЛИ РЕЧЕНИЦИ ОД ЛАТИНИЦА ВО КИРИЛИЦА

Стојанче Спасов ВЕБ СЕРВИС ЗА ПОВЕЌЕЗНАЧНА ТРАНСЛИТЕРАЦИЈА НА ЦЕЛИ РЕЧЕНИЦИ ОД ЛАТИНИЦА ВО КИРИЛИЦА УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ФАКУЛТЕТ ЗА ИНФОРМАТИКА Катедра по информациски технологии Стојанче Спасов ВЕБ СЕРВИС ЗА ПОВЕЌЕЗНАЧНА ТРАНСЛИТЕРАЦИЈА НА ЦЕЛИ РЕЧЕНИЦИ ОД ЛАТИНИЦА ВО КИРИЛИЦА - МАГИСТЕРСКИ

More information

Универзитет Св. Климент Охридски - Битола Факултет за туризам и угостителство Охрид. Дипломиран организатор по туризам и угостителство

Универзитет Св. Климент Охридски - Битола Факултет за туризам и угостителство Охрид. Дипломиран организатор по туризам и угостителство Кратка биографија ЛИЧНИ ИНФОРМАЦИИ Презиме и име: Контакт адреса: Татјана Димоска Телефон: +389 46 262 147/ 123 (работа) Факс: +389 46 264 215 E-mail: Националност: Македонка Дата на раѓање: 16.10.1974

More information

Петти состанок на Локалната советодавна група Записник од состанокот

Петти состанок на Локалната советодавна група Записник од состанокот Technical Assistance for Civil Society Organisations Macedonian Office This project is funded by the European Union. Петти состанок на Локалната советодавна група Записник од состанокот Датум: 26ти Октомври

More information

КРЕИРАЊЕ НА СТАНДАРДИЗИРАНА ЛОКАЛИЗИРАНА ЗБИРКА НА ОБЈЕКТИ ЗА УЧЕЊЕ ОД АСПЕКТ НА ИНТЕРОПЕРАБИЛНОСТ

КРЕИРАЊЕ НА СТАНДАРДИЗИРАНА ЛОКАЛИЗИРАНА ЗБИРКА НА ОБЈЕКТИ ЗА УЧЕЊЕ ОД АСПЕКТ НА ИНТЕРОПЕРАБИЛНОСТ УНИВЕРЗИТЕТ СВ. КИРИЛ И МЕТОДИЈ ПРИРОДНО-МАТЕМАТИЧКИ ФАКУЛТЕТ СКОПЈЕ ИНСТИТУТ ЗА ИНФОРМАТИКА Зоран Здравев КРЕИРАЊЕ НА СТАНДАРДИЗИРАНА ЛОКАЛИЗИРАНА ЗБИРКА НА ОБЈЕКТИ ЗА УЧЕЊЕ ОД АСПЕКТ НА ИНТЕРОПЕРАБИЛНОСТ

More information

DDoS напади и DDoS напади врз DNS

DDoS напади и DDoS напади врз DNS DDoS напади и DDoS напади врз DNS Александар Николоски 1, Митко Богдановски 2 1 Европски Универзитет Скопје, Р. Македонија, nikoloski.aleksandar11@live.eurm.edu.mk 2 Воена академија Скопје, Р. Македонија,

More information

Основи и развој на. Основи и развој на е-влада

Основи и развој на. Основи и развој на е-влада Основи и развој на е-влада Основи и развој на е-влада 1 Издавачи: УСАИД/Проект за е-влада Министерство за информатичко општество Фондација Метаморфозис За издавачите: Елена Стаматоска, директор на УСАИД/Проект

More information

а) Сексуално и репродуктивно здравје - Пристап до информации - Лица со оштетен вид и слух - Македонија - Истражувања

а) Сексуално и репродуктивно здравје - Пристап до информации - Лица со оштетен вид и слух - Македонија - Истражувања 1 CIP - Каталогизација во публикација Национална и универзитетска библиотека «Св. Климент Охридски», Скопје 613.88-056.262/.263(497.7)(047.3) ПРИСТАП до информации и услуги за сексуално и репродуктивно

More information

РАЗВОЈ НА АНДРОИД АПЛИКАЦИЈА

РАЗВОЈ НА АНДРОИД АПЛИКАЦИЈА РАЗВОЈ НА АНДРОИД АПЛИКАЦИЈА ЗА БАЛАНСИРАНА ИСХРАНА Магистерски труд Павле Стојановски Број на индекс: 21068 КОМИСИЈА ЗА ОЦЕНКА И ОДБРАНА НА ТРУДОТ: 1. Проф. д-р Милка Здравковска претседател 2. Проф.

More information

СОЗДАВАЊЕ ИНОВАТИВНИ УЧИЛИШТА: ПОДГОТВУВАЊЕ НА УЧЕНИЦИТЕ ЗА 21-ОТ ВЕК

СОЗДАВАЊЕ ИНОВАТИВНИ УЧИЛИШТА: ПОДГОТВУВАЊЕ НА УЧЕНИЦИТЕ ЗА 21-ОТ ВЕК СОЗДАВАЊЕ ИНОВАТИВНИ УЧИЛИШТА: ПОДГОТВУВАЊЕ НА УЧЕНИЦИТЕ ЗА 21-ОТ ВЕК Скопје, 2009 Проект за основно образование ПРИРАЧНИК ЗА УЧИЛИШНИTE ТИМОВИ ЗА ПРОФЕСИОНАЛЕН РАЗВОЈ Скопје, 2009 Проект за основно образование

More information

Безбедност на VoIP системите

Безбедност на VoIP системите Безбедност на VoIP системите Настески Владимир Европски Универзитет Факултет за Информатика Сашо Гелев Европски Универзитет Факултет за Информатика Апстракт Voice over Internet Protocol е термин, односно

More information

КАРАКТЕРИСТИКИ НА НАСТАВНИТЕ ПРОГРАМИ ПО МАТЕМАТИКА ЗА ОСНОВНО ОБРАЗОВАНИЕ ( , , )

КАРАКТЕРИСТИКИ НА НАСТАВНИТЕ ПРОГРАМИ ПО МАТЕМАТИКА ЗА ОСНОВНО ОБРАЗОВАНИЕ ( , , ) МАТЕМАТИЧКИ ОМНИБУС, 2 (2017), 107 121 КАРАКТЕРИСТИКИ НА НАСТАВНИТЕ ПРОГРАМИ ПО МАТЕМАТИКА ЗА ОСНОВНО ОБРАЗОВАНИЕ (1996 1998, 2007 2009, 2013 2015) Лидија Кондинска 1 Снежана Ристовска 2 Промените во наставата

More information

INFORMATION SYSTEM PROPOSAL FOR CLOUD BASED FILE SYSTEM

INFORMATION SYSTEM PROPOSAL FOR CLOUD BASED FILE SYSTEM INFORMATION SYSTEM PROPOSAL FOR CLOUD BASED FILE SYSTEM Александар Соколовски 1, Сашо Гелев 1 1 Европски Универзитет Република Македонија Скопје, aleksandar.sokolovski@eurm.edu.mk saso.gelev@eurm.edu.mk

More information

Биоелектрохемија: од биогоривни ќелии до електрохемија на мембрански процеси. Валентин Мирчески

Биоелектрохемија: од биогоривни ќелии до електрохемија на мембрански процеси. Валентин Мирчески Биоелектрохемија: од биогоривни ќелии до електрохемија на мембрански процеси 25 Цели: Добивање на електрична струја со користење на живи организми Проучување на врската помеѓу електричните и хемиските

More information

ПРОЦЕС НА ПРОМЕНИ ВО МАРКЕТИНГ СТРАТЕГИЈАТА И СТРУКТУРАТА

ПРОЦЕС НА ПРОМЕНИ ВО МАРКЕТИНГ СТРАТЕГИЈАТА И СТРУКТУРАТА ПРОЦЕС НА ПРОМЕНИ ВО МАРКЕТИНГ СТРАТЕГИЈАТА И СТРУКТУРАТА Апстракт Организациската промена е компонента на современото претпријатие,бидејќи се смета дека процесот на промените го подобрува работниот систем.при

More information

Штип. Кристина Анчевска

Штип. Кристина Анчевска УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ - ШТИП ЕКОНОМСКИ ФАКУЛТЕТ МБА - Менаџмент Штип Кристина Анчевска ВЛИЈАНИЕТО НА МЕНАЏМЕНТ КОНТРОЛАТА ВРЗ УСПЕШНОСТА НА РАБОТЕЊЕТО НА КОМПАНИИТЕ (со посебен осврт на текстилната дејност

More information

2.3 ЗАКОН ЗА БЕЗБЕДНОСТ И ЗДРАВЈЕ ПРИ РАБОТА. Службен весник на Република Македонија бр. 53 од 11 април 2013 година

2.3 ЗАКОН ЗА БЕЗБЕДНОСТ И ЗДРАВЈЕ ПРИ РАБОТА. Службен весник на Република Македонија бр. 53 од 11 април 2013 година 2.3 ЗАКОН ЗА БЕЗБЕДНОСТ И ЗДРАВЈЕ ПРИ РАБОТА Службен весник на Република Македонија бр. 53 од 11 април 2013 година ОСНОВНИ БАРАЊА ЗА БЕЗБЕДНОСТ И ЗДРАВЈЕ ПРИ РАБОТА Со Законот за безбедност и здравје при

More information

University St.Kliment Ohridski - Bitola Scientific Tobacco Institute- Priep ABSTRACT

University St.Kliment Ohridski - Bitola Scientific Tobacco Institute- Priep   ABSTRACT Тутун / Tobacco, Vol.64, N⁰ 1-6, 46-55, 2014 ISSN 0494-3244 Тутун/Tobacco,Vol.64, N⁰1-6, 62-69, 2014 UDC: 633.71-152.61(497) 2008/2012 633.71-152.61(497.7) 2008/2012 Original Scientific paper DYNAMIC PRESENTATION

More information

MANAGEMENT & LEADERSHIP SCHOOL FOR ENGINEERS МЕНАЏЕРСКА И ЛИДЕРСКА ШКОЛА ЗА ИНЖЕНЕРИ

MANAGEMENT & LEADERSHIP SCHOOL FOR ENGINEERS МЕНАЏЕРСКА И ЛИДЕРСКА ШКОЛА ЗА ИНЖЕНЕРИ MANAGEMENT & LEADERSHIP SCHOOL FOR ENGINEERS МЕНАЏЕРСКА И ЛИДЕРСКА ШКОЛА ЗА ИНЖЕНЕРИ МЕНАЏЕРСКА И ЛИДЕРСКА ШКОЛА ЗА ИНЖЕНЕРИ Институтот за Истражување во животна средина, градежништво и енергетика ИЕГЕ

More information

ПРЕГЛЕД И АНАЛИЗА НА БЕЗЖИЧНИ СЕНЗОРСКИ МРЕЖИ СО ПОСЕБЕН ОСВРТ НА ПЕРФОРМАНСИТЕ НА ZIGBEE ПРОТОКОЛОТ

ПРЕГЛЕД И АНАЛИЗА НА БЕЗЖИЧНИ СЕНЗОРСКИ МРЕЖИ СО ПОСЕБЕН ОСВРТ НА ПЕРФОРМАНСИТЕ НА ZIGBEE ПРОТОКОЛОТ ПРЕГЛЕД И АНАЛИЗА НА БЕЗЖИЧНИ СЕНЗОРСКИ МРЕЖИ СО ПОСЕБЕН ОСВРТ НА ПЕРФОРМАНСИТЕ НА ZIGBEE ПРОТОКОЛОТ Борис Михајлов, Митко Богданоски, Сашо Гелев Европски Универзитет Скопје, Р. Македонија mihajlov.boris@live.eurm.edu.mk,

More information

ТОЛКОВНИК НА ПОИМИ, ТЕРМИНИ И ИМИЊА ОД ОБЛАСТА НА ТУРИЗМОТ (АНГЛИСКО-РУСКО-МАКЕДОНСКИ)

ТОЛКОВНИК НА ПОИМИ, ТЕРМИНИ И ИМИЊА ОД ОБЛАСТА НА ТУРИЗМОТ (АНГЛИСКО-РУСКО-МАКЕДОНСКИ) ТОЛКОВНИК НА ПОИМИ, ТЕРМИНИ И ИМИЊА ОД ОБЛАСТА НА ТУРИЗМОТ (АНГЛИСКО-РУСКО-МАКЕДОНСКИ) Современост, Скопје, 2013 За издавачот: м-р Славчо Ковилоски Рецензенти: проф. д-р Марија Ацковска проф. д-р Толе

More information

consultancy final presentation conceptual presentation of proposals projects Feasibility Cost Study for converting space

consultancy final presentation conceptual presentation of proposals projects Feasibility Cost Study for converting space recording existing state of the facility listening to client s requests real assessment of space capabilities assessment of state of structual elements recomendation for improvement of stability of existing

More information

СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ

СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ Промотивнo бесплатнo користење на дополнителен ТВ ресивер и NOW... 2 Промотивнo NOW бесплатно

More information

Стратегија за развој на Македонски интегриран здравствен информатички систем

Стратегија за развој на Македонски интегриран здравствен информатички систем Министерство за здравство на РМ Проект за управување со здравствениот сектор Стратегија за развој на Македонски интегриран здравствен информатички систем Предговор и абстракт за менаџментот Примарната

More information

ЦИВИКА МОБИЛИТАС МАЛИ АКЦИСКИ ГРАНТОВИ

ЦИВИКА МОБИЛИТАС МАЛИ АКЦИСКИ ГРАНТОВИ ЦИВИКА МОБИЛИТАС МАЛИ АКЦИСКИ ГРАНТОВИ ПОВИК ЗА ПРЕДЛОЗИ Реф. бр. ЦМ-МАК-01 ОБРАЗЕЦ ЗА ПРИЈАВА (се пополнува/поднесува само доколку апликантот е писмено поканет да поднесе пријава) Апликант: Име на акцијата:

More information

КОСМО ИНОВАТИВЕН ЦЕНТАР

КОСМО ИНОВАТИВЕН ЦЕНТАР КОСМО ИНОВАТИВЕН ЦЕНТАР бул. Јане Сандански бр.113, 1000 Скопје фах.+389 2 244 8240 тел.+389 2 244 8077 contact@cosmoinnovate.com.mk ЦЕНОВНИК НА ОБУКИ ЗА 2011/2012 ГОДИНА Со овие обуки кандидатите ги надополнуваат

More information

Универзитет Св. Климент Охридски- Битола. Факултет за информатички и. комуникациски технологии - Битола. Студиска програма:

Универзитет Св. Климент Охридски- Битола. Факултет за информатички и. комуникациски технологии - Битола. Студиска програма: Универзитет Св. Климент Охридски- Битола Факултет за информатички и комуникациски технологии - Битола Студиска програма: Администрирање со јавни политики Влатко Степаноски ВЛИЈАНИЕТО НА ПРЕТПРИСТАПНИТЕ

More information

Западен Балкан - Препорака за учество на јавноста

Западен Балкан - Препорака за учество на јавноста Западен Балкан - Препорака за учество на јавноста Преамбула Министрите надлежни за реформите на јавната администрација во државите на Западниот Балкан, Согледувајќи дека реформата на јавната администрација

More information

Предуслови. Чекор 1. Централен регистар на Р.М. Упатство за пристап до системот за Е-Поднесување на годишни сметки 1

Предуслови. Чекор 1. Централен регистар на Р.М. Упатство за пристап до системот за Е-Поднесување на годишни сметки 1 Чекор 1 Предуслови Предуслпвите кпи е пптребнп да ги задпвплите за успешнп ппднесуваое на гпдишна сметки се: - Да имате пристап вп апликацијата за електрпнскп ппднесуваое на гпдишни сметки; - Вашипт правен

More information

Модел за имплементација на Интернет на нештата (IoT) во индустријата, базиран на лесно достапни хардверски платформи

Модел за имплементација на Интернет на нештата (IoT) во индустријата, базиран на лесно достапни хардверски платформи Универзитет,,Св. Климент Охридски" Битола Факултет за информатички и комуникациски технологии Модел за имплементација на Интернет на нештата (IoT) во индустријата, базиран на лесно достапни хардверски

More information

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ. МБА Менаџмент. Ивана Трендафилова

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ. МБА Менаџмент. Ивана Трендафилова УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ МБА Менаџмент Ивана Трендафилова УЛОГАТА НА МЕНАЏЕРОТ - ЛИДЕРОТ ВО УПРАВУВАЊЕ СО КОНФЛИКТИ ПРЕКУ ПОТТИКНУВАЊЕ НА КОНСТРУКТИВНИ, А РАЗРЕШУВАЊЕ И ИЗБЕГНУВАЊЕ

More information

Д Е К Л А Р А Ц И Ј А за Вклученост на Заедницата

Д Е К Л А Р А Ц И Ј А за Вклученост на Заедницата Д Е К Л А Р А Ц И Ј А за Вклученост на Заедницата British Embassy Skopje Проектот е финансиран од Британска Амбасада - Скопје, а спроведен од Здружението за одржлив развој и соработка АЛКА од Скопје. The

More information

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ. МБА Менаџмент. Штип. Слаџана Стефанова

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ. МБА Менаџмент. Штип. Слаџана Стефанова УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ МБА Менаџмент Штип Слаџана Стефанова ВЛИЈАНИЕТО НА РЕГРУТИРАЊЕТО И СЕЛЕКТИРАЊЕТО НА ВРАБОТЕНИТЕ ВРЗ УСПЕШНОСТА НА РАБОТЕЊЕТО НА ОРГАНИЗАЦИИТЕ - МАГИСТЕРСКИ

More information

СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ

СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ СТАРИ ПРОМОТИВНИ ПОНУДИ ЗА ПОСТПЕЈД ТАРИФНИ МОДЕЛИ ЗА УСЛУГИ НА ФИКСНА ЛОКАЦИЈА И КОМБИНИРАНИ ПАКЕТИ УСЛУГИ Промоција Pink и Balkan+ 1 месец бесплатно... 3 Промоција - Нарачајте онлајн Vip Комбо 4 пакет

More information

КОНКУРС. За запишување студенти на факултетите на Универзитетот на Југоисточна Европа во академската 2012/2013 година

КОНКУРС. За запишување студенти на факултетите на Универзитетот на Југоисточна Европа во академската 2012/2013 година КОНКУРС За запишување студенти на факултетите на Универзитетот на Југоисточна Европа во академската 2012/2013 година Врз основа на член 108 од Законот за високото образование (Службен весник на Р. М бр.

More information

6. Функции Вовед во програмирање 1. Д- р Рамона Маркоска, доцент

6. Функции Вовед во програмирање 1. Д- р Рамона Маркоска, доцент 6. Функции Вовед во програмирање 1 Д- р Рамона Маркоска, доцент Содржини во ова поглавје... Функции општо Дефиниција Декларација Користење Видови Повикување и поврзување со маин, вгнездување Параметри

More information

АРХИТЕКТУРА, КОМПОНЕНТИ И ИМПЛЕМЕНТАЦИЈА НА IPTV СЕРВИСОТ

АРХИТЕКТУРА, КОМПОНЕНТИ И ИМПЛЕМЕНТАЦИЈА НА IPTV СЕРВИСОТ Доцент д-р Сашо Гелев Универзитет Гоце Делчев Штип, Електротехнички факултет; Вон. проф. д-р Ристо Христов Европски универзитет, Скопје Факултет за информатика; Ана Ивановска АРХИТЕКТУРА, КОМПОНЕНТИ И

More information

Leila, the sick girl. Sick girl s friend. (Наставникот) Class teacher. Girl with bike rider (Девојчето со велосипедистот) (Велосипедистот)

Leila, the sick girl. Sick girl s friend. (Наставникот) Class teacher. Girl with bike rider (Девојчето со велосипедистот) (Велосипедистот) (Болна на школо) List of characters (Личности) Leila, the sick girl Sick girl s friend Class teacher Nurse (Лејла, болното девојче) (Пријателот на болното девојче) (Наставникот) (Медицинската сестра) Girl

More information

Прирачник за управување со општинскиот имот

Прирачник за управување со општинскиот имот Прирачник за управување со општинскиот имот (прирачник за оние кои ги донесуваат одлуките на локално ниво) ноември 2014 год. ОСНОВНИ ПОДАТОЦИ Клиент: Финансирано од: Меѓународна консултантска компанија:

More information

СОВРЕМЕНИ СТРАТЕГИИ ЗА УПРАВУВАЊЕ НА ИНТЕЛИГЕНТНИ ЕЛЕКТРОЕНЕРГЕТСКИ МРЕЖИ

СОВРЕМЕНИ СТРАТЕГИИ ЗА УПРАВУВАЊЕ НА ИНТЕЛИГЕНТНИ ЕЛЕКТРОЕНЕРГЕТСКИ МРЕЖИ 8. СОВЕТУВАЊЕ Охрид, 22 24 септември Александра Крколева Матеска Весна Борозан Факултет за електротехника и информациски технологии - Скопје СОВРЕМЕНИ СТРАТЕГИИ ЗА УПРАВУВАЊЕ НА ИНТЕЛИГЕНТНИ ЕЛЕКТРОЕНЕРГЕТСКИ

More information

ГИС НАПРЕДНА СОФТВЕРСКА ОКОЛИНА ИМПЛЕМЕНТИРАНА ВО ФУНКЦИОНИРАЊЕТО НА АД МЕПСО

ГИС НАПРЕДНА СОФТВЕРСКА ОКОЛИНА ИМПЛЕМЕНТИРАНА ВО ФУНКЦИОНИРАЊЕТО НА АД МЕПСО ПЕТТО СОВЕТУВАЊЕ Охрид, 7 9 октомври 2007 Ванчо Трпевски Зоран Делев АД МЕПСО - Скопје ГИС НАПРЕДНА СОФТВЕРСКА ОКОЛИНА ИМПЛЕМЕНТИРАНА ВО ФУНКЦИОНИРАЊЕТО НА АД МЕПСО КУСА СОДРЖИНА : Познато е дека во 2005

More information

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП

УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП УНИВЕРЗИТЕТ ГОЦЕ ДЕЛЧЕВ ШТИП ЕКОНОМСКИ ФАКУЛТЕТ МБА Менаџмент Штип Ивица Костадинов ДИЗАЈНИРАЊЕ И ИНСТИТУЦИОНИРАЊЕ НА ОРГАНИЗАЦИСКА СТРУКТУРА И КУЛТУРА - МАГИСТЕРСКИ ТРУД- Штип, декември 2015 Апстракт

More information