Komponentno orijentisano programiranje
Komponentno orijentisano programiranje (KOP) (takođe poznato kao razvojna komponenta na bazi (RKB)) je ogranak softverskog inženjerstva koja ističe odvajanje problema u pogledu funkcionalnosti široko dostupnim tokom određenog softverskog sistema. To je ponovni pristup zasnovan na definisanju, implementaciji i komponovanja labavo spregnutih nezavisnih komponenti u sistemima. Ova praksa ima za cilj da dovede do jednako širokog stepena koristi i u kratkom roku i dugoročno za samo softver i za organizacije koje sponzorišu takav softver.
Softversko inženjerski praktikanti smatraju komponente kao deo početne platforme za servis orijentaciju. Komponente igraju ovu ulogu, na primer, u veb servisima, a odnedavno, u servis orijentisanoj arhitekturi (SOA), pri čemu komponentu konvertuje veb servis u servis, a potom nasledi dalje karakteristike koje prevazilaze obične komponente.
Komponente mogu proizvesti ili konzumirati događaje i mogu se koristiti i u događaj-pokretnoj arhitekturi (DPA).
Definicija i karakteristike komponenti[uredi | uredi izvor]
Pojedinačna softverska komponenta je softverski paket, veb servis, izvor na internetu, ili modul koji sažima skup povezanih Funkcija (ili podataka).
Svi procesi sistema su postavljeni u odvojene komponente, tako da svi podaci i funkcije unutar svake komponente su semantički povezane (kao sa sadržajem nastave). Zbog ovog principa, za komponente se često kaže da su modularne i kohezivne.
Što se tiče sistemske koordinacije, komponente komuniciraju jedne sa drugima preko interfejsa. Kada komponenta pruža usluge ostatku sistema, ona ih usvaja pod uslovom da interfejs navodi usluge koje druge komponente mogu da se koriste, i kako one mogu da rade. Ovaj interfejs se može posmatrati kao potpis komponente - klijent ne treba da zna o unutrasnjim poslovima komponente (implementacija) kako bi koristio to. Ovaj princip rezultata u komponenti nazivaju enkapsulirani. UML ilustracije u okviru ovog člana predstavljaju obezbeđen interfejse od strane lollipop-simbola priključenog na spoljašnje ivice komponente.
Međutim, kada komponenta treba da koristiti neku drugu komponentu u cilju funkcije, ona usvaja da se koristi interfejs koji navodi usluge koje su mu potrebne. U UML ilustracijama u ovom članku, koriste se interfejsi u predstavljanju otvorene utičnice piključene na spoljašnje ivice komponente.
Još jedna važna osobina komponenti je da su zamenljive, tako da komponenta može da zameni drugu (na dizajn vremena ili komponenti), ako je komponenta naslednik i ispunjava zahteve početne komponente (izražena preko interfejsa). Prema tome, komponente se mogu zameniti bilo sa ažuriranom verzijom ili alternativom bez narušavanja sistema u kojoj komponenta djeluje.
Kao opšte pravilo za inženjere zamenom komponente, komponenta B može odmah da zameni komponentu A, ako komponenta B obezbeđuje barem ono što komponenta A, i ne koristi više od onoga što komponenta A koristi.
Softverske komponente su često u obliku objekata (ne klase) ili kolekcije predmeta (iz Objektno-orijentisanog programiranja), u nekom binarnom ili tekstualnom obliku, pridržavajući se neki opis interfejs jezika (OIJ), tako da komponenta može postojati samostalno od drugih komponenti u kompjuteru. Drugim rečima, komponenta deluje bez promene svog izvornog koda. Iako ponašanje izvornog koda komponente može da se menja na osnovu proširenja aplikacije, pod uslovom svog pisca.
Kada se komponenti pristupi ili deli u izvršenju konteksta ili mrežnim vezama, tehnike, kao što su serijalizacije u Makišu se često koriste da dostave komponentu svog odredišta.
Upotrebljivost je važna karakteristika za kvalitetnu softversku komponentu. Programeri treba da osmisle i sprovedu softverske komponente na takav način da mnogi različiti programi mogu da ih ponovo koristite. Osim toga, komponenta bazirana na testiranju upotrebljivosti treba uzeti u obzir kada softverske komponente direktno komuniciraju sa korisnicima.
Potrebno je uložiti značajne napore da se napiše softverska komponenta koja je efikasna za višekratnu upotrebu. Komponenta treba da bude:
- u potpunosti dokumentovana
- ispitana
- robusna - sa sveobuhvatnim proverama ulaznog-važenja
- može da vrati odgovarajuće poruke o greškama ili vraća kodove
- dizajnirana sa svešću da će biti stavljena za nepredviđene namene
Godine 1960, e, programeri su izgradili naučne podrutinske biblioteke koje su za višekratnu upotrebu u širokom spektru inženjeringa i naučnih aplikacija. Iako ove podrutinske biblioteke ponovo koriste dobro definisane algoritme na efikasan način, one su imale ograničen domen primene. Komercijalni sajtovi rutinski stvaraju aplikacije za višekratnu upotrebu modula napisanih na Asembler-u, KOBOL, PL/1 druge i treće generacije jezika koji koriste oba sistema i korisničke aplikacione biblioteke.
Od 2010. godine, modernu višekratnu upotrebu komponente obuhvataju obe strukture podataka i algoritme koji se primenjuju na strukturama podataka. To [pojašnjenje potrebno] se nadovezuje na prethodne teorije softverskih objekata, softverske arhitekture, softverskih ramova i dezena softvera, kao i opsežne teorije objektno orijentisanog programiranja i objektno orijentisano projektovanje svih njih. Ona tvrdi da softverske komponente, kao što je ideja o hardverskoj komponenti, koja se koristi na primer u oblasti telekomunikacija,[1] može na kraju biti zamenljiva i pouzdana. S druge strane, tvrdi da je greška što se fokusira na nezavisne komponente umesto okvire (bez kojih ne bi postojala).[2]
Istorija[uredi | uredi izvor]
Ideja da softver treba da bude komponenta - izgrađena od montažnih elemenata - prvi put je istaknuta na obraćanju Daglasa Mekilroia na konferenciji o NATO softverskom inženjeringu u Garmiš-Partenkirhenu, Nemačkoj, 1968. godine, pod nazivom Masovna proizvodnja softverskih komponenti.[3] Konferencija je krenuli da se suprotstavi tzv softverskoj krizi. Sledeće uključivanje Mekilroi je bilo o cevima i filterima u Juniksu operativnom sistemu prva implementacija infrastrukture za ovu ideju.
Bred Koks od Steptone u velikoj meri definiše savremeni koncept softverskih komponenti. On ih je nazvao Softver ICs i krenuo je da stvori infrastrukturu i tržište za ove komponente[4] izmišljanjem Objective-S programskog jezika. (On sažima ovaj stav u svojoj knjizi Objektno orijentisanog programiranja - evolutivni pristup 1986)
Softverske komponente koriste se u dva različita konteksta i dve vrste: (1.) uz komponente i delove da izgrade jednu izvršnu, ili (2.) svako izvršnu tretira kao komponentu u distribuiranom okruženju, gde komponente sarađuju međusobno koristeći internet ili intranet komunikacioni protokol za IPK (Inter proces komunikacije). Navedeni pripada bivšim vrstama.
IBM-je vodio put sa svojim sistemom objekt modelom (SOM) početkom 1990-ih. Kao reakcija Microsoft otvara put za stvarno raspoređivanje komponenti softvera sa OLE i COM.[5] Od 2010. godine postoji mnogo uspešnih modela softverskih komponenati.
Razlike iz objektno orijentisanog programiranja[uredi | uredi izvor]
Kritičari objektno orijentisanog programiranja (OOP) tvrde da softver treba da bude napisan u skladu sa mentalnim modelima stvarnih ili izmišljenih objekata koje zastupa. OOP i srodnih disciplina objektno-orijentisana analiza i objektno-orijentisanog dizajna sa fokusom na modeliranju u stvarnom svetu [uredi] interakcije i pokušava da stvori "imenice" i "glagole" koji se mogu koristiti na više čitljiv način, idealno krajnjim korisnicima, kao i od strane programera koji kodiraju to krajnjim korisnicima.
Komponentno orijentisano programiranje, s druge strane, ne pravi takve pretpostavke, i umesto toga navodi da programer treba da izgradi softver lepljenjem zajedno montažnih elemenata - slično kao i u oblasti elektronike i mehanike. Pojedini vršnjaci [ko?] će čak govoriti o modularizingu sistemimama kao softverske komponente nove paradigme programiranja. Primer za moguću paradigme: mnogi stručnjaci smatraju da evoluira potreba prilagodljiv je važnija od ponovne upotrebe, jer 80% softverskog inženjerstva se bavi održavanjem ili otpuštanjem nove verzije. Zato je poželjno da se izgradi kompleksan sistem sastavljanjem od visoko kohezivnih labava spregnutih velikih komponenti gde trošak redizajniranja svake od takvih usvojivih komponenti (ili zamena boljim komponentom) se minimizira.
Neki [ko?] tvrde da su ranije kompjuterski naučnici napravili ovu razliku, sa teorijom "pismenog programiranja" Donalda Knuta optimistički pod pretpostavkom da je sličnost između intuitivnih i formalnih modela, a Edsger Dajkstra teorija u članku okrutnosti Realli nastave informatike, koji je izjavio da je programiranje jednostavno i samo grana matematike.[6][7]
U oba oblika, ovaj pojam je doveo do mnogih akademskih rasprava [Veasel vords] o prednostima i manama ova dva pristupa i mogućih strategija za objedinjavanje oba. Neki [ko?] razmatraju različite strategije ne kao konkurente, ali kao opise istih problema sa različitih tačaka gledišta.
Jedan pristup za stvaranje softverskih komponenata zasnovan koristeći objektno-orijentisano programiranje je raspodeljeno izračunavanje. Međutim, programski interfejs zasnovan ne inherentnim podrškama distribuiranih sistema, i mnogi računarski sistemi se inherentno distribuiraju u 21. veku. Programming Interface zasnovan na OOP smislu može se produžiti do distribuiranih sistema za distribuirane modele komponent objekta; Međutim, mnogi su tvrdili u poslednjih nekoliko godina da ODMOR API ili glumac modela su pogodniji za pristup.
Arhitektura[uredi | uredi izvor]
Računar koji radi nekoliko softverskih komponenti se često naziva aplikativni server. Ova kombinacija aplikacija servera i softverskih komponenti se obično naziva raspodeljeno izračunavanje. Tipična realnom svetu primenjena je u, na primer, finansijskim aplikacijama ili poslovnim softverima.
Modeli[uredi | uredi izvor]
Model komponenta je definisanje standarda za komponentne implementacije, dokumentaciju i primenu. Primeri komponentnih modela su: Enterprise JavaBeans (EJB) modela, Component Object Model (COM). NET model i uobičajen zahtev objekta broker Arhitektura (Corba) komponenta model. Komponenta model određuje kako interfejsi treba da budu definisani i elementi koji treba da budu uključeni u definiciji interfejsa.
Tehnologije[uredi | uredi izvor]
- Tehnologije Biznis objekata
- Komponentno orijentisani softver okviri za određene domene
- Napredna Komponenta okvir
- Zemlja Sistem okvir za modeliranje (ZSOM)
- MASH IOT platforma za upravljanje aktivom[8]
- KOALA komponenta Razvijen model za softver u potrošačke elektronike[9][10]
- Softver za komunikacije Arhitektura (JTRS SKA)
- Komponentno orijentisano programiranje
- Paketi kako je definisano OSGi servisne platforme
- Komponenta veb platforma za modularne JS, CSS i druga sredstava
- Component Object Model (SDK / ActiveKs / COM) i DCOM iz Majkrosofta
- TASCS - SciDAC Centar za tehnologiju Advanced Naučno komponente Softvare
- Ajfel programski jezik
- Enterprise JavaBeans iz Sun Mikrosistema (nov Oracle)
- Protok na bazi programiranja
- Fraktal modela komponenta iz ObjectVeb
- MidCOM komponenta okvir za Midgard i PHP
- Oberon, Komponenta Paskal, i BlackBok Komponenta Builder
- rCOS metod modela komponenti na bazi pogon dizajna od UNU-popisu
- SOFA komponenta sistema od ObjectVeb
- Sistem. ComponentModel imena Majkrosoft . NET
- Uniti3D razvio Uniti Technologies
- UNO iz OpenOffice.org paketa office
- VCL i CLH iz Borland i sl. besplatna LCL biblioteka.
- HPCOM od Mozilla Foundacije
- Tehnologije složenih dokumenata
- Aktivni Dokumenti u sistemu Oberon i BlackBok Component Builder
- KPart, KDE jedinjenje tehnologija dokumenata
- Object Linking i Embedding (OLE)
- OpenDoc
- Raspodeljeno izračunavanje softverskih komponenti
- . NET Remoting iz Majkrosofta
- 9P distribuirani protokol razvijen za plan 9, a koristi se u Inferno i drugim sistemima.
- Corba i Corba Komponenta model iz Upravnog objekta grupe
- D-Bus od freedesktop.org organizacije
- DCOM i kasnije verzije COM (i COM +) iz Majkrosofta
- DSOM i SOM iz IBM-a (sada ukinute)
- Led sa ZeroC
- Java EE od Sun Mikrosistema
- Kompics[11] iz ŠICS
- Univerzalni mrežni objekti (UMO) od OpenOffice.org
- Veb servisi
- Zope od Zope Korporacije
- AKSIOMA (komponenta okvir za distribuirano, u realnom vremenu, i ugrađeni sistemi) za lek[12]
- COHORTE krst-platforma runtime za izvršavanje i upravljanje robustan i pouzdan distribuiranih servisno orijentisane Component-based aplikacije, od isandlaTech
- Generičko programiranje naglašava odvojenost algoritama iz reprezentacije podataka
- Opis interfejs jezika (IDLs)
- Otvoren Servis Interfejs Definicije (OSIDs)
- Deo oba COM i CORBA
- Platforma-nezavisna komponenta modeliranje Jezik
- SIDL - Naučni interfejs Definition Language
- Deo Babel naučnog programskog jezika interoperabilnost sistema (Sidl i Babel su osnovne tehnologije CCA [potrebna odrednica] i SciDAC TASCS Centar - vidi gore).
- SOAP IDL od Svetkse mreže (WWW)
- VDDKS
- XML-RPC, preteča SOAP-a
- Inverzija Control (MOK) i Plain Old C ++ / Java predmeta (Poco / pojo) okvira komponente
- Cevi i filteri
Vidi još[uredi | uredi izvor]
- Poslovna logika
- Modularno programiranje
- Servis komponenta Arhitektura (PKS)
- Softver za komunikacije Arhitektura (JTRS PKS)
- Softverska komponenta treće strane
- Veb servis
- Veb komponente
Reference[uredi | uredi izvor]
- ^ Foukalas, Fotis; Ntarladimas, Yiorgos; Glentis, Aristotelis; Boufidis, Zachos (2005). „Protocol Reconfiguration Using Component-Based Design”. Distributed Applications and Interoperable Systems. Lecture Notes in Computer Science. 3543. str. 148—156. ISBN 978-3-540-26262-6. doi:10.1007/11498094_14.
- ^ Wallace, Bruce (May 19, 2010). "A hole for every component, and every component in its hole". Existential Programming. There is no such thing as a Component
- ^ McIlroy, Malcolm Douglas (January 1969). "Mass produced software components" (PDF). Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968. Scientific Affairs Division, NATO. str. 79.
- ^ Rainer Niekamp. "Software Component Architecture" Arhivirano na sajtu Wayback Machine (28. mart 2012) (PDF). Gestión de Congresos - CIMNE/Institute for Scientific Computing, TU Braunschweig. str. 4. Pristupljeno 2011-07-29. The modern concept of a software component largely defined by Brad Cox of Stepstone, => Objective-C programming language
- ^ Raphael Gfeller (December 9, 2008). "Upgrading of component-based application"[mrtva veza]. HSR - Hochschule für Technik Rapperswill. str. 4. Pristupljeno 2011-07-29. 1990, IBM invents their System Object Model. 1990, as a reaction, Microsoft released OLE 1.0 OLE custom controls (OCX)
- ^ "Dijkstra, Wybe Edsger". Encyclopedia.com. Pristupljeno 2011-07-29. In his view, the key to a good computing science program was to consider it as a branch of mathematics.
- ^ Donald E. Knuth (September 1983). "Literate Programming" (PDF). Literate Programming/The Computer Journal. str. 15. Pristupljeno 2011-07-29. Thus, WEB may be only for the subset of computer scientists who like to write and to explain what they are doing. My hope is that the ability to make explanations more natural will cause more programmers to discover the joys of literate programming, because I believe it’s quite a pleasure to combine verbal and mathematical skills; but perhaps I’m hoping for too much. The fact that at least one paper has been written that is a syntactically correct ALGOL 68 program22 encourages me to persevere in my hopes for the future. Perhaps we will even one day find Pulitzer prizes awarded to computer programs.
- ^ MASH defines assets as people, property and information and management as monitoring, control and configuration. Presented at the 2013 IEEE IoT conference in Mountain View MASH includes a full IDE, Android client and runtime. "MASH YouTube channel"
- ^ A component-oriented approach is an ideal way to handle the diversity of software in consumer electronics. The Koala model, used for embedded software in TV sets, allows late binding of reusable components with no additional overhead. [1]
- ^ Component model for embedded devices like TV developed by Philips based on paper by van Ommering, R.: Koala, a Component Model for Consumer Electronics Product Software [2] Arhivirano na sajtu Wayback Machine (9. август 2014)
- ^ Arad, Cosmin (April 2013). "Programming Model and Protocols for Reconfigurable Distributed Systems" (PDF). Doctoral Dissertation. Stockholm, Sweden: KTH Royal Institute of Technology. ISBN 978-91-7501-694-8.
- ^ Remedy IT - AXCIOMA
Dodatna literatura[uredi | uredi izvor]
- Cox, Brad J.; Novobilski, Andrew J. (1991). Object-Oriented Programming: An Evolutionary Approach (2nd izd.). Reading: Addison-Wesle. ISBN 978-0-201-54834-1.
- Bertrand Meyer (1997). Object-Oriented Software Construction. 2nd ed. Prentice Hall.
- Heineman, George T.; Councill, William T. (2001). Component-Based Software Engineering: Putting the Pieces Together. Reading: Addison-Wesley Professional. ISBN 978-0-201-70485-3.
- Veryard, Richard (2001). Component-based business : plug and play. London: Springer. ISBN 978-1-85233-361-4.
- Szyperski, Clemens (2002). Component Software: Beyond Object-Oriented Programming (2nd izd.). Boston: Addison-Wesley Professional. ISBN 978-0-201-74572-6.
Spoljašnje veze[uredi | uredi izvor]
- Why Software Reuse has Failed and How to Make It Work for You[3] by Douglas C. Schmidt
- comprehensive list of Component Systems on SourceForge