I. NOŢIUNI INTRODUCTIVE

I. 1. Internet
I.1.1. Noţiuni generale Internet

În contextul informatic actual, atât în ţară cât şi în lume, informatica distribuită este unul din domeniile cele mai înalte, atât în teoria, cât şi în practica informatică

Aplicaţiile informatice actuale sunt de neconceput fără comunicaţii. Comunicarea în Internet a devenit o sursă inepuizabilă şi rapidă de documentare, depăşind complet toate celelalte surse de comunicare.

Reţeaua de calculatoare (computer network) este un sistem de comunicaţie care are la capete calculatoare. Aceste calculatoare se numesc gazde sau host-uri.

Reţeaua Internet serveşte ca mijloc de transport pentru comunicaţiile de date prin intermediul mai multor protocoale de distribuire a informaţiilor. Cu ajutorul dispozitivelor gateway, multe alte reţele din spaţiul informational pot schimba date cu reţeaua Internet. Datorită acestui fapt şi datorită cantităţii mari de date disponibile în Internet, această reţea serveşte ca bază comună pentru regiunile din spaţiul informaţional conectate la reţea.

LAN (Local Area Network) conectează host-uri aflate în apropiere care folosesc tehnologia ethernet sau token ring.

10 Mbps la 100 Mbps

 

WAN (Wide Area Network) - conectează calculatoare din diferite oraşe şi ţări.

14400 bps la 154 Mbps

MAN (Metropolitan Area Network) - intermediar între LAN şi WAN - la nivel de oraş.

9600 bps la 33000 bps

Reţea Internetwork - conectarea între două sau mai multe reţele.

Gateway - legătură între două calculatoare plasate în două reţele diferite.

Conectarea între două reţele se realizează şi prin intermediul unei componente mai evoluate numite router.

Protocol - este un set de reguli şi convenţii ce se stabilesc între participanţii la o comunicaţie, este independent de conţinutul mesajelor care se schimbă în cadrul comunicaţiei (emiţător = sursă, receptor = destinaţie).

ISO (International Standard Organization)

OSI (Open System Organization)

TCP/IP - Transmision Control Protocol /Internet Protocol

Bitul este unitatea de informaţie, octetul este unitatea de adresare a memoriei într-un sistem de calcul, locaţia, formată din unu sau mai mulţi octeţi, este unitatea de reprezentare a unei date.

Port - este un număr întreg pe 16 biţi, cu rol de identificare a locului unde se schimbă informaţiile între un proces şi un protocol.

IP (Internet Protocol) - asigură transmiterea nefiabilă (nu garantează ajungerea la destinaţie), prin intermediul unor adrese Internet.

Entitatea de transmisie IP se numeşte pachet sau datagramă IP.

TCP (Transmission Control Protocol) - asigură transferul fiabil al datelor între aplicaţiile sursă şi destinaţie.

[Porturi: ftp 21, finger 79, login 513, talk 517]

FTP (File Transfer Protocol) - program pentru transferul aflat la distanţă.

Adresă IP - specificarea numerică; pe 32 biţi, există 232 astfel de adrese

Adresă Internet - specificare prin nume de domenii.

Sistem distribuit (de calcul) - este o colecţie de noduri (calculatoare, procesoare, procese autonome) care sunt interconectate şi a căror existenţă este transparentă pentru utilizator.

Sistemul de operare are sarcina de a distribui resurse utilizatorilor.

Resurse - hard (imprimante, unităţi de disc etc.) + resurse soft (fişiere, programe etc.).

I.1.2. Sistem de operare pentru reţea

Accesul la o resursă trebuie să se facă cu un login pe masină sau să se transfere datele de pe maşina aflată la distanţă pe propria maşină.

Funcţia principală de reţea a acestor sisteme de operare este transferul de fişiere, deci serviciul FTP.

Pentru a realiza copierea unui fişier fişier1 de pe maşina maşinaB în fişierul fişier2 de pe maşina locală maşinaA, se impun următoarele:

I.1.3. Sisteme de operare distribuite

Accesul utilizatorului la resurse depărtate se face ca şi cum ar fi pe maşina locală, migrarea sistemului de operare, păstrându-se consistenţa informaţiilor.

Când un proces este supus execuţiei, el nu este întotdeauna executat de procesorul care l-a iniţiat.

Motivele care conduc la migrarea proceselor:

Fiecare cerere trebuie să fie servită imediat. Ordinea prelucrării cererilor coincide cu ordinea în care acestea au sosit. Ordinea de sosire a cererilor nu coincide neapărat cu ordinea temporară a emiterii lor. Una dintre cauzele acestei ,,anomalii" este întârzierea unora dintre transmisii datorită vitezelor relative de transport pe reţea.

Sistem distribuit este o colecţie de procese şi un subsistem de comunicaţie.

Algoritm distribuit este o colecţie de algoritmi locali pentru colecţia de procese P=(p1,p2, .., pn), care folosesc aceeaşi mulţime M de mesaje şi în care pentru fiecare eveniment send dintr-un algoritm local din colecţia P există un eveniment receive corespunzător într-un alt algoritm local din aceeaşi colecţie P.

O configuraţie constă din starea fiecărui proces şi mulţimea mesajelor care sunt în tranzit.

Transmiterea sincronă - un proces nu poate să transmită un mesaj decât dacă destinaţia este gata să-l primească.

Aplicaţie distribuită - constă dintr-un set de proceduri care nu sunt toate rezidente pe un sistem de calcul.


I.1.4. Modelul Server - Client

Modelul client-server pentru calculatoarele conectate în reţea implică trei componente: clientul, serverul şi reţeaua.

Serverul este o aplicaţie care de obicei rulează pe calculatorul furnizorului de informaţii.

Clientul este o aplicaţie care de cele mai multe ori rulează pe calculatorul utilizatorului final.

Programul client este adaptat sistemului hardware pe care rulează şi funcţionează ca o interfaţă între sistemul respectiv şi informaţiile furnizate de server. Cererea este transportată prin reţea de la client la server. Serverul analizează cererea şi execută activităţile corespunzătoare. Rezultatele tranzacţiilor cerute (dacă există) sunt trimise către programul client şi afişate pe ecranul utilizatorului. Toate comunicaţiile între client şi server se fac conform unui set de reguli sau protocoale definite pentru sistemul client-server. Clientul poate avea acces la mai multe servere, folosind protocoale pe care le înţeleg atât serverul cât şi clientul.


Forma distribuită a activităţilor de tip ,,cerere" şi ,,serviciu" din modelul client-server permite creţterea eficienţei, deoarece comunicarea dintre client şi server se face conform unui protocol predefinit.

Serverul oferă servicii clienţilor din reţea, deci el produce resurse iar clientul le consumă.

Orice aplicaţie în care solicitantul acţiunii este un sistem de calcul (sau proces) şi executantul acţiunii este alt sistem de calcul (sau alt proces) este o aplicaţie client-server.

Mecanism de funcţionare:

Cererile posibile pentru client:

Criterii de clasificare a serverelor

  1. Durata contactului client <->server

    1. servere iterative

      • manipulează ele însele rezolvarea cererii (se cunoaşte durata cererii şi resursele cererii - ora şi durata).

    2. servere concurente

      • serverele primesc cererea de la client, lansează un alt proces care va rezolva cererea, după care el trece din nou în starea de aşteptare a unei noi cereri de la un alt client (Ex.: tipărirea unui fişier, citirea unui fişier etc.).

  2. Gradul de informaţii deţinute de server

    1. Servere cu stări (statefull)

      • are informaţii despre clienti.

    2. Servere fără stări (stateless)

      • nu are informaţii despre clienţi.

  3. Tipul de conexiune folosit

      - servere care utilizează serviciu orientat conexiune;

      - servere care folosesc servicii fără conexiune.

Server cu stare care acceptă cereri de citire dintr-un fişier).

Cererile lansate de către clienţi sunt open şi read. Clientul cere serverului să deschidă un fişier, în care scop transmite numele fişierului şi modul de deschidere (citire, scriere). Clientul primeşte înapoi descriptorul de fişier şi lungimea fişierului deschis. Apoi clientul cere citirea, din fişierul desemnat de descriptor, a unui număr de octeţi (maximum lungimea fişierului).

Serverul reţine astfel starea fişierului care a fost deschis, compusă din: numele fişierului, modul în care a fost deschis şi poziţia curentă în fişier.

În acest fel serverul poate recepţiona de la clientul care a deschis fişierul chiar o succesiune de comenzi.

Server fără stare

Serverul stateless nu are decât o procedură read (nu are procedura open), clientul îi transmite toate informaţiile necesare citirii, iar el îşi întreţine singur poziţia curentă în fişierul de pe server, primind de la server numai rezultatul citirii.

În sistemele distribuite trebuie evitată existenţa unui unic punct de blocare, adică a posibilităţilor ca prin blocarea unui singur proces/calculator să se blocheze întreg sistemul.

În sistemele monoprocesor regiunile critice sunt protejate prin construcţii de tipul semafoarelor, monitoarelor, variabilelor de acces exclusiv etc.

Caracteristica esenţială a tuturor acestor construcţii este aceea că procesele sunt coordonate de către acelaşi nucleu şi toate procesele au acces la memoria internă a sistemului, în care partajează o zonă comună.

Sistemele distribuite sunt lipsite de memoria comună partajabilă între procese.

Algoritm robust - fiecare pas în fiecare proces se face în aşa fel încât să nu fie afectat.

Algoritm de stabilizare - procesele corecte pot să fie afectate de defecte, dar algoritmul trebuie să ofere certitudinea că poate să îşi revină din orice configuraţie, atunci când procesele îşi reiau comportamentul corect.

Cerinţa de consistenţă impune existenta unei relaţii între deciziile luate de diferitele procese din sistem.

Un socket este un ,,capăt de comunicaţie" sau un ,,punct final de comunicaţie", care poate fi numit şi adresat într-o reţea, fiind locul unde programul de aplicatie se întâlneşte cu furnizorul mediului de transport. Din punct de vedere al sistemului de operare este o structură de date întreţinută de către nucleul sistemului de operare.

Socket stream defineste un serviciu orientat conexiune, datele fiind transmise fără erori şi duplicări, sunt recepţionate în ordinea în care au fost transmise, fluxul de date din reţea este realizat astfel încât să se evite depăşirea unei valori maxime de octeţi la un moment dat.

I.1.5. Aplicaţie de supraveghere

Utilă administratorilor cu un supracontrol de depistare a unor accese neautorizate sau de consum nejustificat de resurse, timp, memorie, spaţiu, disc etc.

I.2. Reţele de calculatoare

I.2.1. Modelul de referinţă TCP/IP

La început a fost ARPANET-ul care a fost o reţea de cercetare sponsorizată de către U.S. Departament of Defense - Departamentul de Apărare al Statelor Unite pe scurt DOD. Această reţea s-a dezvoltat fără încetare prin noi noduri în deosebi militare şi academice. În cele din urmă, reţeaua a ajuns să conecteze între ele, utilizând linii telefonice închiriate, sute de reţele universitare şi guvernamentale. Problema care s-a ivit a fost cea a compatibilităţi sistemelor legate la reţea. Aşa s-a pus problema creării unei noi arhitecturi de referinţă. De aceea, posibilitatea de a interconecta fără probleme mai multe tipuri de reţele a reprezentat de la bun început un obiectiv de proiectare major. Această arhitectură a devenit cunoscută mai târziu sub denumirea de modelul de referinţă TCP/IP, dată după numele celor două protocoale fundamentale utilizate. Arhitectura respectivă a fost definită prima dată în 1974 de Cerf şi Kahn.

Dată fiind îngrijorarea Departamentului de Apărare că o parte din preţioasele sale gazde, routere şi porţi (gateways) de interconectare ar pute fi distruse dintr-un moment în altul, un alt obiectiv major a fost ca reţeaua să poată supravieţui pierderii echipamentelor din subreţea fără a fi întrerupte conversaţiile existente. Cu alte cuvinte DOD dorea ca atâta timp cât funcţionau maşina sursă şi maşina destinaţie, conexiunile să rămână intacte, chiar dacă o parte din maşini sau din liniile de transmisie erau brusc scoase din funcţiune. Mai mult, era nevoie de o arhitectură flexibilă deoarece se aveau în vedere aplicaţii cu cerinţe divergente, mergând de la transferul de fişiere până la transmiterea vorbirii în timp real.

I.2.2. Nivelul Internet

Toate aceste cerinţe au condus la alegerea unei reţele cu comutarea de pachete bazată pe un nivel inter-reţea fără conexiuni. Acest nivel, numit nivelul Internet, este axul pe care se centrează întreaga arhitectură. Rolul său de a permite gazdelor să emită pachete în orice reţea şi a face ca pachetele să circule independent până la destinaţie (fiind posibil ca aceasta să se găsească pe o altă reţea). Pachetele pot chiar să sosească într-o ordine diferită faţă de ceea în care au fost trimise, caz în care - dacă se doreşte furnizarea lor ordonată - rearanjarea cade în sarcina nivelurilor de mai sus. De observat că ,,Internet" este folosit aici într-un sens generic, chiar dacă acest nivel este prezent şi în Internet.

Aici, analogia este cu sistemul de poştă (clasică). O persoană dintr-o anumită ţară poate depune într-o cutie poştală mai multe scrisori internaţionale şi cu puţin noroc, majoritate scrisorilor vor ajunge la adresa corectă din ţara de destinaţie. Probabil că scrisorile vor trece pe drum prin mai multe oficii de cartare, dar acest lucru se face transparent pentru utilizatori. Mai mult, faptul că fiecare ţară (adică fiecare reţea) are propriile timbre, propriile mărimi favorite de plicuri şi propriile reguli de livrare este ascuns beneficiarilor.

Nivelul Internet defineşte oficial un format de pachet şi un protocol numit IP (Internet Protocol - protocol Internet). Sarcina nivelului Internet este să furnizeze pachete IP către destinaţie. Problemele majore se referă la dirijare pachetelor şi evitarea congestiei. În consecinţă, este rezonabil să spunem că nivelul Internet din TCP/IP funcţionează asemănător cu nivelul reţea din OSI. Figura I.2.2. arată această corespondentă.

Figura I.2.2. Modelul de referinţă TCP/IP

I.2.3. Nivelul transport

Nivelul situat deasupra nivelului Internet din modelul TCP/IP este frecvent numit nivelul transport. Acesta este proiectat astfel încât să permită conversaţii între entităţile pereche din gazdele sursă şi respectiv, destinaţie, la fel ca în nivelul transport OSI. În acest sens au fost definite două protocoale capăt la capăt. Primul din ele, TCP (Transmision Control Protocol - protocolul de control al transmisiei), este un protocol sigur orientat pe conexiuni care permite ca un flux de octeţi trimişi de pe o maşină să ajungă fără erori pe orice altă maşină din inter-reţea. Acest protocol fragmentează fluxul de octeţi în mesaje discrete şi pasează mesajul nivelului Internet. La destinaţie procesul TCP receptor reasamblează mesajele primite în flux de ieşire. TCP tratează totodată controlul fluxului pentru a se asigura o coerenţă între emiţătoare. Adică un emiţător rapid nu inundă un receptor lent cu mai multe mesaje decât poate acesta să prelucreze.

Figura I.2.3. Protocoale şi reţele din modelul TCP/IP iniţial

Al doilea protocol din nivel, UDP (User Datagram Protocol - protocolul datagramelor utilizator), este un protocol nesigur, fără conexiuni, destinat aplicaţiilor care doresc să utilizeze propria lor secvenţiere şi control al fluxului, şi nu pe cele asigurate de TCP. Protocolul UDP este de asemenea mult folosit pentru interogări întrebare-răspuns dintr-un foc, client-server, şi pentru aplicaţii în care comunicarea promptă este mai importantă decât comunicarea cu acurateţe, aşa cum sunt aplicaţiile de transmisie a vorbirii şi a imaginilor video. Relaţia dintre IP, TCP şi UDP este prezentată în figura I.2.3. De când a fost dezvoltat acest model, IP a fost implementat pe multe alte reţele.

I.2.4. Nivelul aplicaţie

Modelul TCP/IP nu conţine nivelurile sesiune sau prezentare. Acestea nu au fost incluse pentru că nu s-a simţit nevoia lor. Experienţa modelului OSI a dovedit că această viziune a fost corectă: în majoritatea aplicaţiilor, nivelurile respective nu sunt de mare folos.

Deasupra nivelului transport se află nivelul aplicaţie. Acesta conţine toate protocoalele de nivel mai înalt. Aşa cum se vede din figura I.2.3. primele protocoale de acest gen includeau terminalul virtual (TELNET), transferul de fişiere (FTP) şi poşta electronică (SMTP). Protocolul de terminal virtual permite unui utilizator de pe o masină să se conecteze şi să lucreze pe o masină aflată la distanţă. Protocolul de transfer de fişiere pune la dispoziţie o modalitate de a muta eficient date de pe o maşină pe alta. Poşta electronică a fost la origine doar un tip de transfer de fişier, dar ulterior a fost dezvoltat un protocol specializat pentru acest serviciu. Pe parcursul anilor, la aceste protocoale s-au adăugat multe altele, asa cum sunt Serviciul numelor de domenii (Domain Name Service - DNS) pentru stabilirea corespondenţe pentru numele gazdelor şi adresele reţetelor NNTP, protocolul utilizat pentru a transfera articole de ştiri, HTTP, folosit pentru aducerea paginilor de pe Web, şi multe altele.

I.2.5. Nivelul gazdă-retea

Sub nivelul Internet se află necunoscutul. Modelul de referinţă TCP/IP nu spune mare lucru despre ce se întâmplă acolo, însă menţionează că gazda trebuie să se lege de reţea, pentru a putea trimite pachete IP, folosind un anumit protocol. Acest protocol nu este definit şi variază de la gazdă la gazdă şi de la reţea la reţea. Cărţile şi articolele despre TCP/IP rareori discută despre acest protocol.

I.2.6. Nivelul transport TCP, UDP

Internetul are două protocoale importante pe nivelul transport: un protocol orientat pe conexiuni şi un altul fără conexiuni. Protocolul orientat pe conexiuni este TCP, protocolul fără conexiuni este UDP, UDP nefiind în esenţă altceva decât IP extins cu un scurt antet.

Nivelul transport nu este doar un alt nivel, el este miezul întregii ierarhii de protocoale. Sarcina sa este de a transporta date de la maşina sursă la maşina destinaţie într-o manieră sigură şi eficace din punct de vedere al costurilor, independent de reţeaua sau reţelele fizice utilizate. Fără nivelul transport şi-ar pierde sensul întregul concept de ierarhie de protocoale.

TCP (Transport Communication Protocol - protocol de comunicaţie de nivel transport) a fost proiectat explicit pentru a asigura un flux sigur de octeţi de la un capăt la celălalt al conexiunii într-o inter-reţea nesigură. O inter-reţea diferă de o reţea propriu-zisă prin faptul că diferite părţi ale sale pot diferi substanţial în topologie, lărgime de bandă, întârzieri, dimensiunea pachetelor şi alţi parametrii. TCP a fost proiectat să se adapteze în mod dinamic la proprietăţile reţelei Internet şi să fie robust în ceea ce priveşte mai multe tipuri de defecte.

TCP a fost definit în mod oficial în RFC 793. Odată cu trecerea timpului, au fost detectate diverse erori şi inconsistenţe şi au fost modificate cerinţele în anumite subdomenii. Aceste clarificări, precum şi corectarea cătorva erori sunt detaliate în RFC 793. Extensiile sunt furnizate în RFC 1323.

Fiecare masină care suportă TCP dispune de o entitate de transport TCP, fie ca proces utilizator, fie ca parte a nucleului care gestionează fluxurile TCP şi interfeţele către nivelul IP. O entitate TCP acceptă fluxul de date utilizator de la procesele locale, le împarte în fragmente care nu depăşesc 64K octeţi, de regulă în fragmente de aproximativ de 1500 de octeţi, şi expediază fiecare fragment ca o datagramă IP separată. Atunci când datagramele IP conţinând informaţie TCP sosesc la o maşină, ele sunt furnizate entităţii TCP, care reconstruieşte fluxul original de octeţi. Pentru simplificare vom folosi câteodată doar TCP, sub-întelegând prin aceasta sau entitatea TCP de transport (o porţiune de program) sau protocolul TCP (un set de reguli). Din context va fi clar care din cele două noţiuni este referită. De exemplu, în ,,Utilizatorul furnizează date TCP-ului" este clară referirea la entitate TCP de transport.

Nivelul IP nu oferă nici o garanţie că datagramele vor fi livrate corect, astfel că este sarcina TCP-ului să detecteze eroarea şi să efectueze o retransmisie atunci când situaţia o impune. Datagramele care ajung, totuşi, la destinaţie pot sosi într-o ordine eronată; este, de asemenea, sarcina TCP-ul trebuie să le reasambleze în mesaje respectând ordinea corectă (de secvenţă). Pe scurt, TCP-ul trebuie să ofere fiabilitatea pe care cei mai mulţi utilizatori o doresc şi pe care IP-ul nu o furnizează.

I.2.7. Modelul serviciului TCP

Serviciul TCP este obţinut prin crearea atât de către emiţător cât şi de către receptor a unor puncte finale, numite socluri (sockets). Fiecare soclu are un număr de soclu (adresă) format din adresa IP a maşinii gazdă şi un număr de 16 biţi, local gazdei respective, numit port. Port este numit TCP pentru un TSAP. Pentru a obţine o conexiune TCP, trebuie stabilită explicit o conexiune între un soclu de pe maşina emiţătoare şi un soclu de pe maşina receptoare.

Un soclu poate fi folosit la un moment pentru mai multe conexiuni. Altfel spus, două sau mai multe conexiuni se pot termina la acelaşi soclu. Conexiunile sunt identificate prin identificatorii soclurilor de la ambele capete, adică (soclul1, soclul2). Nu este folosit nici un alt număr sau identificator de circuit virtual.

Numerele de port mai mici decât 256 se numesc porturi general cunoscute şi sunt rezervate serviciilor standard. De exemplu, orice proces care doreşte să stabilească o conexiune cu o maşină gazdă pentru a transfera un fişier utilizând FTP, se poate conecta la portul 21 al maşinii destinaţie pentru a contacta demonul său FTP. Similar, portul 23 este folosit pentru a stabili o sesiune de lucru la distanţă utilizând TELNET. Lista porturilor general cunoscute este conţinută în RFC 1700.

Toate conexiunile TCP sunt duplex integral şi punct la punct. Duplex integral înseamnă că traficul se poate desfăşura în ambele sensuri în acelaşi timp. Punct la punct indică faptul că fiecare conexiune are exact două puncte finale. TCP nu suportă difuzarea parţială sau totală.

O conexiune TCP este un flux de octeţi şi nu un flux de mesaje. Dimensiunile mesajelor nu se conservă de la un capăt la celălalt. De exemplu, dacă procesul emiţător execută patru scrieri de câte 512 octeţi pe un canal TCP, aceste date pot fi livrate procesului receptor ca patru fragmente (chunks) de 512 octeţi, două fragmente de 1024 octeţi, un singur fragment de 2048 octeţi (vezi figura I.2.7.) sau în orice alt mod. Nu există posibilitatea ca receptorul să determine numărul de unităţi în care a fost scrisă informaţia.

În UNIX, aceeaşi proprietate o au şi fişierele. Cititorul unui fişier nu poate spune dacă fişierul a fost scris bloc cu bloc, octet cu octet sau tot dintr-o dată. Ca şi un fişier UNIX, programele TCP nu au nici cea mai vagă idee despre semnificaşia octeţilor şi nici cel mai mic interes pentru a afla acest lucru. Un octet este pur şi simplu un octet.

Figura I.2.7.

a) Patru segmente de 512 octeţi au fost trimise ca datagrame IP separate
b) Livrarea celor 2048 octeţi către aplicaţie, printr-un singur apel read.

Atunci când o aplicaţie trimite date către TCP, TCP-ul le poate expedia imediat sau le poate reţine într-un tampon (în scopul colectării unei cantităţi mai mari de informaţie pe care să o expedieze toată odată), după bunul său plac. Cu toate acestea câteodată, aplicaţia doreşte explicit ca informaţia să fie expediată imediat. De exemplu, să presupunem că un utilizator este conectat la o maşină de la distanţă. După ce a fost terminată o linie de comandă şi s-a tastat Enter, este esenţial ca linia să fie imediat expediată către maşina de la distanţă şi să nu fie memorată până la terminarea următoarei linii. Pentru a forţa expedierea, aplicaţia poate folosi indicatorul PUSH, care îi semnalează TCP-ului să nu întârzie procesul de transmisie.

Unele din primele aplicaţii foloseau indicatorul PUSH ca un fel de marcaj pentru a delimita marginile mesajelor. Deşi acest truc funcţionează câteodată, uneori el eşuează datorită faptului că la recepţie, nu toate implementările TCP-ului transmit aplicaţiei indicatorul PUSH. Mai mult decât atât, dacă mai multe indicatoare PUSH apar înainte ca primul să fi fost transmis (de exemplu, pentru că linia de legătură este ocupată), TCP-ul este liber să colecteze toată informaţia referită de către aceste indicatoare într-o singură datagramă IP, fără să includă nici un separator între diferitele sale părţi.

O ultimă caracteristică a serviciului TCP care merită menţionată aici constă în informaţia urgentă. Atunci când un utilizator apasă tasta DEL sau CTRL-C pentru a întrerupe o prelucrare la distanţă, aflată deja în execuţie, aplicaţia emiţător plasează o informaţie de control în fluxul de date şi o furnizează TCP-ului împreună cu indicatorul URGENT. Acest eveniment impune TCP-ului întreruperea acumulării de informaţie şi transmisia imediată a întregii informaţii disponibile deja pentru conexiunea respectivă.

Atunci când informaţia urgentă este recepţionată la destinaţie, aplicaţia receptoare este întreruptă (de exemplu prin emisia unui semnal, în terminologie UNIX), astfel încât eliberată de orice altă activitate, aplicaţia să poată citi fluxul de date şi să poată regăsi informaţia urgentă. Sfârşitul informaţiei urgente este marcat, astfel încât aplicaţia să ştie când se termină informaţia. Începutul informaţiei urgentă nu este marcat. Este sarcina aplicaţiei să determine acest început. Această schemă furnizează de fapt un rudiment de mecanism de semnalizare, orice alte detalii fiind lăsate la latitudinea aplicaţiei.

Antetul segmentului TCP

<-------------------------------------------- 32 biţi ---------------------------------------->
Port sursă Port destinaţie
Număr de secvenţe
Număr de confirmare
Lungimea antetului TCP URG ACK PSH RST SZN FIN Dimensiunea ferestrei
Sumă de control Indicator urgent
Opţiuni (unul sau mai multe cuvinte pe 32 de biţi)
Date (opţional)

Figura I.2.7.b). Antetul segmentului TCP

Să vedem structura antetului TCP. Câmpurile Port sursă şi Port destinaţie indentifică punctele finale ale conexiunii. Câmpurile Număr de secvenţă şi Număr de confirmare au semnificaţia funcţiilor lor uzuale, acestea au mărimea de 32 biţi. Lungimea antetului TCP indică numărul de cuvinte de 32 biţi care sunt conţinute în antetul TCP. Această informaţie este utilă deoarece câmpul Opţiuni este de lungime variabilă. Urmează un câmp de 6 biţi care nu sunt utilizaţi. După aceea urmează şase indicatori de un bit: URG - este 1 dacă Indicatorul urgent este valid, ACK - este 1 dacă Numărul de confirmare este valid, PSH - indică informaţia Forţată, adică receptorul este rugat să livreze aplicaţiei informaţia imediat ce este recepţionată, RST este folosit pentru a desfiinţa conexiunea care a devenit inutilizabilă datorită defecţiunii unei maşini sau din alt motiv, SYN - este folosit pentru stabilirea unei conexiuni, FIN - este folosit pentru a încheia o conexiune. Câmpul fereastră - indică numărul de octeţi care pot fi trimişi, începând de la octetul confirmat. Suma de control - este folosita în scopul obţineri unei fiabilităţi extreme, este calculată pentru antet. Câmpul opţiuni a fost proiectat pentru a permite adăugarea unor facilităţi suplimentare neacoperite de antetul obişnuit.


I.2.8. UDP

Protocolul datagramă utilizator (User Datagram Protocol - UDP)

În loc de TCP în unele aplicaţii este folosit un alt protocol, numit user datagranm protocol (UDP), care, în loc de a pune date în ,,plicuri TCP şi apoi acestea în ,,plicuri" IP, aplicaţia va pune datele în ,,plicuri UDP, care sunt apoi plasate în ,,plicuri IP".

UDP este mult mai simplu decât TCP deoarece nu pune problema pachetelor lipsă, păstrarea în ordinea corectă ş.a. UDP este folosit pentru programe care transmit mesaje scurte şi care doar retransmit mesajele dacă un răspuns nu soseşte într-un scurt interval.

Protocolul UDP asigură nivelului aplicaţie servicii de tip datagramă, fiind un protocol caracterizat de faptul că nu este fiabil, dar are avantajul unei viteze mari de transmisie. Caracteristica de serviciu fără conexiune a protocolului UDP implică faptul că aplicaţia care transmite un mesaj nu cunoaşte, în momentul transmisiei, starea în care se află aplicaţia căreia îi este destinat mesajul. Ideea de bază folosită de acest protocol este aceea de a utiliza pentru transferul datelor nişte entităţi abstracte, numite porturi de protocol şi identificate prin numere întregi pozitive. Porturile de protocol au asociate nişte cozi de mesaje, prin intermediul cărora aplicaţiile sursă şi destinaţie pot comunica chiar dacă vitezele de transmisie şi respectiv recepţie sunt diferite sau aplicaţia nu este pregătită să recepţioneze pachetul în momentul în care acesta este transmis de către aplicaţia sursă.

Deoarece protocolul UDP se bazează în mod direct pe serviciile protocolului IP pentru a trimite datagramele, el preferă acelaşi tip de livrare de mesaje fără conexiune ca şi protocolul IP. Aplicaţiile implicate în transferul de date nu li se asigură certitudinea livrării datagramelor şi nici mecanismele necesare protecţiei la pierderea sau duplicarea acestora. Totuşi, UDP permite emiţătorului să specifice numerele de port al sursei şi destinaţiei mesajului şi calculează o sumă de control a datelor şi a antetului datagramei. Aceste două facilităţi permit aplicaţiilor emiţătoare şi receptoare să asigure livrarea corectă a mesajului. Aplicaţia care necesită livrarea fiabilă a datagramelor trebuie să-şi proiecteze propriile mecanisme de control al fiabilităţii transmisiei de date atunci când folosesc protocolul UDP. În general, transmisia prin protocol se utilizează atunci când dimensiunea mesajelor este mică şi când viteza de transmisie este importantă, chiar dacă transmisia este nefiabilă. În cele ce urmează este descrisă structura antetului unei datagrame UDP:

Source Port Number - specifică adresa portului sursă.

Destination Port Number - specifică adresa portului destinaţie.

Length - specifică lungimea datagramei în octeţi.

Checksum - sumă de control asociată datagramei, în calculul căreia se foloseşte acelaşi algoritm ca şi pentru protocolul IP.

Figura I.2.8. a). Structura UDP

Figura I.2.8.a). arată formatul datagramelor UDP descris în RFC 768. Portul sursă şi destinaţie identifică sursa şi destinaţia aplicaţiei. Lungimea antetului UDP este întotdeauna de 8 biţi. Câmpul lungime UDP conţine lungimea antetului şi datele în biţi. Acest câmp este pe 16 biţi, lungimea maximă este de 65535.

UDP oferă aplicaţiilor o modalitate de a trimite datagrama IP neprelucrate încapsulate şi pe care le transmite fără a stabili o conexiune. Multe aplicaţii client-server în care o parte emite cereri şi cealaltă parte emite răspunsuri folosesc, mai curând UDP decât să se complice să stabilească şi apoi să elibereze o conexiune. UDP este descris în RFC 768.

Figura I.2.8. b). Antetul UDP

Un segment UDP constă într-un antet de 8 octeţi urmat de date. Antetul este prezentat în Fig. 4.6. Cele două porturi au acelaşi rol ca şi în TCP: de a identifica punctele terminale ale maşinilor sursă şi destinaţie. Câmpul lungime UDP include cei 8 octeţi ai antetului plus datele. Câmpul sumă de control UDP cuprinde acelaşi format pseudo-antet prezentat în figura I.2.8. c). Antetul UDP şi datele UDP, completate după caz până la un număr par de octeţi. El este opţional şi în cazul în care nu este calculat, este memorat ca 0 (o valoare 0 rezultată în urma calculelor este memorată ca un şir de biţi 1, ceea ce este acelaşi lucru în complement faţă de 1).

Figura I.2.8. c). Pseudo-antetul inclus în suma de control TCP

Dezactivarea acestuia este o prostie, excepţie făcând cazul în care calitatea informaţiei chiar nu contează (de exemplu: transmisia vocală digitizată).


I.2.9. REZUMAT

Nivelul transport reprezintă cheia pentru înţelegerea protocoalelor stratificate diferit. El furnizează diferite servicii, cel mai important dintre acestea fiind fluxul de octeţi de la emiţător la receptor capăt-la-capăt, fiabil orientat pe conexiuni. El este adresat prin primitive de serviciu care permite stabilirea, utilizarea şi eliberarea conexiunilor.

Protocoalele de transport trebuie să fie capabile să controleze conexiunea în reţele nefiabile. Stabilirea conexiunii este complicată de existenţa pachetelor duplicate întârziate, care pot apare la momente inoportune. Pentru a le face faţă, stabilirea conexiunii trebuie făcută prin intermediul protocoalelor cu înţelegere în trei paşi. Eliberarea unei conexiuni este mai simplă decât stabilirea sa, dar este încă departe de a fi banală.

Chiar şi în cazul unui nivel reţea complet fiabil, nivelul transport are suficient de mult de lucru. El trebuie să controleze toate primitivele de serviciu, toate opţiunile şi contoarele de timp şi trebuie să aloce şi să utilizeze credite.

Principalul protocol de transport în Internet este TCP. El utilizează un antet de 20 de octeţi pentru toate segmentele. Segmentele pot fi fragmentate de router în interiorul Internet-ului şi deci calculatoarele gazdă trebuie să fie pregătite să le reasambleze. S-a depus un mare efort pentru optimizarea performanţelor TCP-ului.

I.3. Limbajul JAVA

I.3.1. Noţiuni generale Java

JavaSoft o companie din cadrul firmei Sun Microsystems, a lucrat câtiva ani la dezvoltarea unui limbaj puternic pentru anii '90 şi pentru mai departe. Java corespunde acestor promisiuni.

Java include cele mai bune aspecte ale limbajelor de programare anterioare, precum C şi C++, permite crearea unor aplicaţii puternice, conţine componente avansate, cum ar fi posibilitatea de lucru cu informaţiile multimedia, care fac prezentările multimedia să poată fi create mai uşor ca niciodată.

Lucrul cel mai interesant la Java este faptul ca acest limbaj este complet orientat pe obiecte şi neutru din punct de vedere arhitectural. Promisiunea făcută la apariţia programării orientate pe obiecte este posibilitatea de refolosire a codului. În Java se poate dezvolta o singură aplicaţie care să fie folosită pe mai multe platforme.

Java permite producătorilor să creeze programe care pot fi livrate utilizatorilor şi rulate pe calculatoarele acestora. Aceste programe pot include orice doresc programatorii: foi de calcul tabelar, programe de instruire, animaţie şi jocuri interactive. Folosind paginile Web ca suport, aceste programe pot îndeplini o mare varietate de sarcini informatice, cu adevărat interactiv; utilizatorii pot acţiona continuu şi instantaneu asupra afişării, animaţiei şi calculelor din aplicaţii.

Scopul limbajului Java este distribuirea conţinutului executabil în Web. După instalare, un browser care recunoaşte limbajul Java pune la dispoziţie o interfaţă pentru aplicaţii interactive şi animate.

După ce compilatorul Java transformă fişierul sursă al unei clase Java în cod octeţi, acest cod poate fi executat pe orice calculator care recunoaşte limbajul Java. În acest mod, codul Java poate fi scris independent de platformă şi se elimină operaţiile de compilare şi rulare executate pe calculatorul client. Codul de octeţi nu este specific unui anumit calculator şi este interpretat de browser.

Programele robuste nu ,,crapă" uşor din cauza erorilor pe care le conţin. Un limbaj de programare care încurajează crearea unor programe robuste foloseşte mai multe restricţii de care programatorul trebuie să ţină seama atunci când scrie codul sursă.

Compilatorul Java creează codul de octeţi care este trimis către browser-ul care a lansat cererea. Codul este interpretat apoi pe calculatorul destinaţie, dacă şi pe acesta a fost instalat un interpretor Java sau un browser care recunoaşte limbajul Java.

Neutralitatea programelor din punct de vedere arhitectural permite un grad înalt de portabilitate.

Limbajul Java poate fi folosit pentru crearea unor programe în care au loc mai multe evenimente în acelaşi timp. Bazat pe un sistem de proceduri care permite folosirea ,,firelor" de evenimente multiple, conform sistemului de monitoare şi condiţii creat de C.A.R. Hoore, Java oferă programatorilor o metodă de implementare a programelor interactive, în timp real.

Java permite introducerea unor noi metode şi instanţe îtr-o bibliotecă de obiecte, fără ca aceasta să afecteze obiectele descendente.

API (Application Programming Interface) este un set de clase.

Java aduce în Web un nou mijloc de comunicare. În loc să se bazeze pe serverele Web pentru furnizarea informaţiilor şi a unor funcţii, conţinutul executabil al applet-urilor face mai inteligente programele de tip browser care recunosc acest limbaj.

Anumite tehnici de programare folosite împreună cu hipertextul Web, cum ar fi programele de trecere (gateway) şi limbaje precum Java sau Virtual Reality Modeling Language pot creşte posibilităţile paginii Web în privinţa interactivităţii, a distribuirii informaţiei şi a comunicării.

Limbajele procedurale privesc lumea în termenii acţiunilor de prelucrare a datelor într-un flux liniar. O proiectare procedurală poate să despartă o acţiune dintr-un domeniu de probleme în mai multe subacţiuni mai mici. Aceste subacţiuni pot fi apoi implementate ca proceduri şi funcţii care prelucrează informaţiile şi datele.

Limbajele orientate pe obiecte văd lumea în termenii unor obiecte care conţin un set de informaţii (date) şi modurile de operare asupra acestor informaţii (metode). Un proiect orientat pe obiecte modelează părţi ale unui domeniu de probleme ca un set de obiecte. Aceste obiecte menţin starea curentă a datelor pe care le conţin şi se comportă în funcţie de modul în care modelele manevrează datele sau transmit mesaje către alte obiecte.

Ramificarea - transferul fluxului de control al unui program la o instrucţiune sau la un grup de instrucţiuni de mai multe ori sau niciodată.

Java este un limbaj de programare, cu declaraţii de date, flux de control, instrucţiuni de calcul şi modalităţi de construire a funcţiilor (metodelor).

Clasa reprezintă un model pentru crearea obiectelor (instanţelor) şi conţine definiţiile datelor şi ale metodelor.

Programele Java pot fi aplicaţii independente cum sunt applet-urile, care sunt interpretate de un browser.

Java permite folosirea unor nume sugestive pentru identificatori, metode şi clase. Pentru operaţiile de calcul sau de comparare, Java permite folosirea unui set de operatori şi de expresii matematice care sunt evaluate conform regulilor de precedenţă stabilite pentru operatori. Expresiile pot fi transformate în alte tipuri de date prin conversiile de tip.

Folosind clase descendente care moştenesc caracteristicile unor clase părinte nu mai este nevoie modificarea codului creat anterior. Specializarea treptată a claselor părinte prin intermediul claselor descendente permite abordarea mai flexibilă şi modulară a programării.

Cuvântul cheie super determină folosirea construcţiilor clasei părinte.

În afara creării subclaselor, clasele părinte pot fi folosite şi pentru crearea unor obiecte într-o altă clasă.

Java este un limbaj cu legătură întârziată, însemnând că la o clasă părinte pot fi adăugate noi metode fără să fie necesară recompilarea claselor descendente.

Crearea şi folosirea claselor, a subclaselor şi a obiectelor este calea prin care se poate profita de avantajele naturii pe obiecte a limbajului Java

Anumite metode speciale ale clasei, numite constructori, sunt apelate automat atunci când se creează un obiect de tipul clasei respective.

Supraîncărcarea - mai multe metode din cadrul aceleaşi clase pot avea acelaşi nume, dar liste de argumente diferite.

Java este un limbaj simplu, orientat pe obiecte, distribuit, interpretat, robust, sigur, neutru din punct de vedere arhitectural, portabil, de înaltă performanţă, multifilar (multithreaded) şi dinamic.

Limbajul a fost de la început orientat spre Internet. Cu toate că Java împrumută multe idei şi, într-o anumită măsură, sintaxa de la C++, este un limbaj complet nou orientat obiect (OO). Limbajul poate fi folosit atât pentru dezvoltarea de aplicaţii de sine stătătoare (standalone) care rulează pe Net cât şi pentru dezvoltarea unor mici aplicaţii (applet, diminutiv de la aplicaţie) care rulează într-o fereastră deschisă într-o pagina Web.

Limbajul Java este complet tipizat: toate tipurile de date şi toate metodele se cunosc înainte de compilare.

Java este un limbaj orientat obiect, cu variabile riguros definite, cu suport integrat pentru mai multe fire de execuţie şi fără trăsături nedefinite sau dependente de sistem.

Java este proiectat să suporte aplicaţii în reţea, cu diferite nivele de conectivitate. Clasa URL permite aplicaţiilor Java să deschidă şi să acceseze obiecte depărtate în Internet.

Java elimină o serie de erori de programare tipice, ceea ce face posibilă scrierea unui soft mai stabil decât în alte limbaje. Se execută în mod automat o serie de controale în timpul execuţiei programelor.

Java permite prin mecanismul de applet aducerea şi execuţia de cod aflat oriunde în Internet.

A scrie programe în Java înseamnă a defini noi clase; o clasă este chiar aplicaţia.

A lansa aplicaţia înseamnă a instanţia un obiect dintr-o clasă şi a apela o metodă din acel obiect. Rezultă de aici că putem lansa instanţe deoarece fiecare va fi alt obiect în memorie.

Avantajul generării unui cod de octeţi universal este acela că el poate fi rulat pe orice sistem care conţine un interpretor JVM (Java Virtual Machine).

Portabilitatea constă în neutralitatea faţă de arhitectură.

Java oferă servicii ,,de simulare" de control al animaţiei, calcule, gestiunea memoriei, etc., (Thread).

Un program Java constă din definirea şi instanţierea unei clase. Unele programe pot conţine în acelaşi text sursă mai multe clase, dar atunci una dintre ele va fi vizibilă în exterior, celelalte fiind numai de uz intern.

Un program standalone trebuie să conţină metoda statică main. Ea are ca parametru un tablou având ca şi elemente şiruri de caractere. Fiecare element al tabloului conţine un argument transmis în linia de comandă ce lansează programul în executie

Dezvoltarea a început la Sun Microsystem în California ca limbaj de programare pentru produse electronice de larg consum. (James Gosling).

În 1990 s-a început proiectarea limbajului care la început era Oak, de dimensiuni reduse, fiabil şi independent de arhitectură.

Echipa de la Java şi-a dat seama că un limbaj independent de arhitectură ca Java ar fi ideal pentru programarea în Internet, deoarece un program scris într-un astfel de limbaj ar putea rula pe diversele tipuri de calculatoare conectate la Internet. La 23 mai 1995, Sun Microsystems a anunţat oficial programele Java şi HotJava fiind primul browser Web care suportă applet-uri Java. Un applet este definit ca un program Java de dimensiuni reduse, care poate fi inclus într-un document HTML. De atunci încoace asistăm la licenţieri de noi versiuni, apariţia de procesoare Java, tehnologii orientate Java.

I.3.2. Clase

O clasă este o structură de date definită de utilizator căreia i se asociază şi metodele (adică funcţiile) prin care se acţionează asupra structurii de date.

Toate clasele posedă câmpuri în care se pot găsi fie variabile fie funcţii (numite şi metode).

Toate câmpurile sunt membrii clasei.

Variabilele descriu ce este clasa iar metodele descriu ce poate să facă clasa.

Se observă o deosebire fundamentală a limbajului Java faţă de limbajele procedurale prin aceea că metodele sunt parte integrantă din clase. Dacă în limbajele procedurale, structurile de date făceau parte din subrutine, erau subordonate funcţiilor, aici funcţiile sunt parte a structurilor de date însă, de cele de mai multe ori, programatorii lucrează cu tipuri (structuri) de date mai complicate, proprii unei anumite aplicaţii.

O clasă este un model pentru crearea obiectelor care conţin datele şi metodele asociate acestor date.

Cuvântul cheie extends din declaraţia unei clase identifică o subclasă.

Clasele se pot referi la ele însele prin cuvântul cheie this.


I.3.3. Obiecte

Din punctul de vedere al programării, un obiect este o reprezentare în memoria calculatorului a proprietăţilor şi comportamentului unei noţiuni sau ale unui obiect real.

Programarea orientată pe obiecte se bazează pe modelarea lumii reale în termenii unor componente software numite obiecte.

Un obiect este o instanţă a clasei. Dacă o clasă poate fi privită ca un proiect, obiectul poate fi privit ca produsul concret realizat după acel proiect. Evident că nu toate clasele pot fi instanţiate.

Când un identificator este declarat ca fiind de tipul definit de o clasă, se spune că identificatorul este un obiect al clasei respective. O clasă este un ,,model" de generare a obiectelor de tipul respectiv.

I.3.4. Metode

Un obiect este format din date şi operaţii numite metode care pot fi aplicate asupra datelor. Aceste metode încapsulează (protejează)datele unui obiect, deoarece metodele sunt singura modalitate de schimbare a stării datelor.

O metodă este o secvenţă de instrucţiuni (un bloc de instrucţiuni), aflat în interiorul unei clase şi care este responsabilă cu efectuarea unei anumite operaţii.

Metodele reprezintă o cale de a organiza programul (clasa) în unităţi separate, responsabile cu anumite acţiuni.

Toate metodele încep cu declararea atributelor metodei (numite uneori şi modificatori).

Metodele sunt una dintre modalităţile de creare a codului refolosibil.

Obiectele de un anumit tip pot fi create prin folosirea cuvântului cheie new înaintea numelui constructorului clasei care defineşte tipul respectiv.

I.3.5. Constructori

Constructorul fiecărei clase este o metodă publică din interiorul unei clase care are acelaşi nume ca şi clasa.

Constructorul este o metodă care ia naştere când se creează un obiect din tipul clasei respective. Constructorul nu întoarce nici o valoare. Toţi constructorii sunt publici şi nu pot fi creaţi ca metode private.

Existenţa a doi constructori în aceeaşi clasă se numeşte supraîncărcare.

I.3.6. Biblioteci (pachete) de clase

O bibliotecă grupează programe (sau subprograme) care extind funcţionalitatea unui limbaj. Spre deosebire de alte limbaje de programare, în Java bibliotecile nu mai sunt organizate pe simple denumiri ci pe pachete. Un pachet cuprinde toate clasele a căror funcţionalitate vizează o anumită temă (de pildă realizarea unei interfeţe grafice utilizator). Motivul ordonării este legat de faptul că Java a fost gândit ca limbaj pentru Internet.

Există pachete pentru realizarea activităţilor I/O, pentru lucrul în reţea, pentru realizarea unor operaţii matematice etc.

Java are o bibliotecă bogată de clase pentru comunicarea prin intermediul setului de protocoale Internet TCP/IP, inclusiv HTML şi FTP. Codul Java poate să manipuleze resurse prin adresele URL.

Un pachet este o colecţie de clase şi/sau de interfete.

Pachet (package) - un set de clase care împreună asigură un anumit gen de prelucrări: grafică, gestiune de fişiere, bibliotecă matematică, comunicaţii la distanţă etc.

java.lang - include clasele şi metodele de bază ale limbajului

java.awt - include clasele pentru interfeţe grafice ale programelor utilizator

java.io - include clasele care manipulează intrările şi ieşirile

java.net - include funcţii de comunicaţii în reţea.

I.3.7. Informaţii despre obiecte

Putem privi obiectul ca pe un set de valori care formează miezul obiectului şi un set de operaţii care îmbracă aceste valori, protejându-le. Vom spune că proprietăţile obiectului sunt încapsulate în interiorul acestora. Mai mult, obiectul încapsulează şi modul de funcţionare a operaţiilor lui specifice, din exterior neputându-se observa decât modul de apelare a acestor operaţii şi rezultatele apelurilor. Cu alte cuvinte, procesul de încapsulare este procesul de ascundere a detaliilor neimportante sau sensibile de constructie a obiectului.

În concluzie, putem spune că obiectele cu care lucrăm fac parte întotdeauna dintr-o familie mai mare de obiecte cu proprietăţi şi comportament similar. Aceste familii de obiecte le vom numi în continuare clase de obiecte sau concepte în timp ce obiectele aparţinând unei anumite clase le vom numi instante ale clasei de obiecte respective.

Clasele abstracte, neinstanţiabile, servesc în general pentru definirea unor proprietăţi sau operaţii comune ale mai multor clase şi pentru a putea generaliza operaţiile referitoare la acestea.

Dacă o clasă de obiecte are cel puţin o metodă abstractă, ea devine în întregime o clasă abstractă şi nu poate fi instanţiată, adică nu putem crea instanţe ale unei clase de obiecte abstracte.

Altfel spus, o clasă abstractă de obiecte este o clasă pentru care nu s-au precizat suficient de clar toate metodele astfel încât să poată fi folosită în mod direct.

O altă proprietate interesantă a claselor de obiecte este aceea de ierarhizare. Practic, ori de câte ori definim o nouă clasă de obiecte care să reprezinte un anumit concept, specificăm clasa de obiecte care reprezintă conceptul original din care provine noul concept împreună cu diferenţele pe care le aduce noul concept derivat faţă de cel original. Această operaţie de definire a unei noi clase de obiecte pe baza uneia deja existente o vom numi derivare. Conceptul mai general se va numi superconcept iar conceptul derivat din acesta se va numi subconcept. În acelaşi mod, clasa originală se va numi superclasă a noii clase în timp ce noua clasă de obiecte se va numi subclasă a clasei derivate.

Uneori, în loc de derivare se foloseşte termenul de extindere. Termenul vine de la faptul că o subclasă îşi extinde superclasa cu noi variabile şi metode.

În spiritul acestei ierarhizări, putem presupune că toate clasele de obiecte sunt derivate dintr-o clasă iniţială, să-i spunem clasa de obiecte generice, în care putem defini proprietăţile şi operaţiile comune tuturor obiectelor precum ar fi testul de egalitate dintre două instanţe, duplicarea instanţelor sau aflarea clasei de care aparţine o anumită instanţă.

Ierarhizarea se poate extinde pe mai multe nivele, sub formă arborescentă, în fiecare punct nodal al structurii arborescente rezultate aflându-se clase de obiecte. Desigur, clasele de obiecte de pe orice nivel pot avea instanţe proprii, cu condiţia să nu fie clase abstracte, imposibil de instanţiat.

O clasă de obiecte derivată dintr-o altă clasă păstrează toate proprietăţile şi operaţiile acesteia din urmă aducând în plus proprietăţi şi operaţii noi.

Moştenirea - obiectele pot folosi caracteristicile altor obiecte fără să fie nevoie să repete codurile care realizează caracteristicile respective. Organizarea obiectelor în clase înseamnă că fiecare obiect dintr-o clasă moşteneşte caracteristicile obiectelor părinţi.

Unele dintre proprietăţile şi operaţiile definite în superclasă pot fi redefinite în subclasele de obiecte derivate. Vechile proprietăţi şi operaţii sunt disponibile în continuare, doar că pentru a le putea accesa va trebui să fie specificată explicit superclasa care deţine copia redefinită. Operaţia de redefinire a unor operaţii sau variabile din interiorul unei clase în timpul procesului de derivare o vom numi rescriere.

Această redefinire ne dă de fapt o mare flexibilitate în construcţia ierarhiei unei probleme date pentru că nici o proprietate sau operaţie definită într-un punct al ierarhiei nu este impusă definitiv pentru conceptele derivate din acest punct direct sau nu.

I.3.8. Interfaţă

Interfaţa este un set de operaţii care trebuiesc definite de o clasă de obiecte pentru a se înscrie într-o anumită categorie. Vom spune despre o clasă care defineşte toate operaţiile unei interfeţe că implementează interfaţa respectivă.

Cu alte cuvinte, putem privi interfeţele ca pe niste reguli de comportament impuse claselor de obiecte. În clipa în care o clasă implementează o anumită interfaţă, obiectele din clasa respectivă pot fi privite în exclusivitate din acest punct de vedere. Interfeţele pot fi privite ca nişte filtre prin care putem privi un anumit obiect, filtre care nu lasă la vedere decât proprietăţile specifice interfeţei, chiar dacă obiectul în vizor este mult mai complicat în realitate.

Interfeţele creează o altă împărţire a obiectelor cu care lucrăm. în afară de împărţirea normală pe clase, putem să împărţim obiectele şi după interfeţele pe care le implementează. Şi, la fel cu situatia în care definim o operaţie doar pentru obiectele unei anumite clase, putem defini şi operaţii care lucrează doar cu obiecte care implementează o anumită interfaţă, indiferent de clasa din care acestea fac parte.

<-font>

I.3.9. Fişiere sursă

Codul sursă Java trebuie introdus cu un editor într-un fişier text pe care îl vom numi în continuare  fişier sursă. Un fişier sursă poate să conţină declaraţia mai multor clase şi interfeţe, dar doar una dintre acestea poate fi declarată publică. Utilizarea celorlalte clase este limitată la fisierul respectiv. Mai mult, nu putem avea în acelaşi timp o interfaţă publică şi o clasă publică declarate în acelaşi fişier sursă.

1.3.10. Compilare şi execuţie

Fişierele sursă Java au obligatoriu extensia .java. Numele lor este identic cu numele clasei sau interfeţei publice declarate în interior. În urma compilării rezultă fişiere cu nume identice cu numele claselor dar cu extensia .class indiferent dacă este vorba de o clasă sau o interfaţă. Compilarea se face cu o comandă de forma:

        javac FişierSursă.java

Comanda aceasta, ca şi celelalte descrise în acest paragraf este specifică mediului de dezvoltare Java pus la dispoziţie de Sun, numit JDK (Java Development Kit).

La compilare, variabila sistem CLASSPATH trebuie să fie deja setată pentru că însuşi compilatorul Java actual este scris în Java.

Pentru lansarea în execuţie a unei aplicaţii Java, trebuie să introduceţi comanda:

        java NumeClasă - unde numele clasei este numele aplicaţiei care conţine metoda main. Interpretorul va căuta un fişier cu numele NumeClasă.class şi va încerca să instanţieze clasa respectivă.

 

I.4. World Wide Web

World Wide Web a schimbat în mod elocvent lumea reţelelor şi popularitatea acestui sistem este în continuă creştere. Ca sistem de comunicare, sistemul Web poate da furnizorilor de informaţii posibilitatea distribuirii şi colectării globale şi instantanee a informaţiilor. Pentru utilizatori, sistemul Web este o imagine dinamică a muncii şi ideilor a milioane de oameni şi organizaţii din lumea întreagă. Pornind de la ideile despre gândirea neliniară, sistemul Web este un integrator de informaţii în Internet şi joacă un rol major în spaţiul informaţional.

Folosind reţeaua Internet ca mijloc de transport, sistemul Web foloseşte o formă de expresie, numită hipertext, care conectează informaţiile înrudite într-o reţea de forma unei plase. Combinat cu multimedia, a rezultat o reţea hipermedia care a deschis noi posibilităţi de exprimare şi de comunicare.

Utilizatorii reţelei Web pot să găsească o destinaţie: un loc în care să lucreze, să înveţe şi să se joace.

Spaţiul informaţional (cyberspace) este un model imaginar al sistemului de comunicare şi interacţiune prin intermediul calculatorului. Activităţile desfăşurate în acest spaţiu include operaţii de informare, comunicare şi interacţiune între utilizatori. Acesta poate fi imaginat ca o sumă a mai multor regiuni, conectate sau neconectate la reţea.

Sistemul Web este o aplicaţie bazată pe modelul client/server pentru comunicaţia de date. Sistemul Web poate funcţiona şi în reţele locale care nu sunt conectate la Internet, dar este foarte cunoscut datorită colecţiei de informaţii pe care le pune la dispozitie în Internet.

Un client Web, cunoscut sub numele de browser, este un program care interpretează şi afişează informaţiile distribuite prin intermediul unui număr mare de protocoale Internet. Un  browser Web este o interfaţă între utilizator şi Web şi operează împreună cu diferite aplicaţii de asistenţă (helper), folosite pentru afişarea informaţiilor multimedia.

Informaţiile multimedia integrate în hipertext, numite hipermedia îmbogăţesc conţinutul paginilor Web.

World Wide Web oferă un sistem de distribuire locală sau globală a informaţiilor hipermedia. Informaţiile sunt organizate asociativ şi sunt distribuite în funcţie de cererile utilizatorilor.

În anul 1965, Led Nelson a inventat termenul hipertext ca să descrie un text în sensul că nu trebuia să fie secvenţial. Hipertextul, asa cum l-a descris Nelson, leagă documentele, astfel încât să formeze o reţea de relaţii care sporeşte posibilităţile de extindere şi de sporire a înţelesului unui text obişnuit prin legarea de alte texte. Hipertextul este mai mult decât nişte simple note de subsol care servesc drept comentarii sau informaţii suplimentare pentru un text; mai degrabă, se poate spune că hipertextul împarte ideile şi informaţiile în fragmente care pot fi apoi incluse în mai multe texte. Nelson a inventat şi termenul hipermedia - include diferite forme de multimedia - imagini, grafică, sunete şi secvenţe video.

Web este un sistem de aplicaţii (un set de programe) şi nu o reţea.

World Wide Web este un sistem de comunicare şi informaţii hipertext folosit, în general, în reţeaua Internet şi care funcţionează prin comunicare de date pe baza unui model client-server. Clienţii Web (programele de tip browser) au acces la informaţii hipermedia şi multiprotocol.

Web oferă utilizatorilor posibilitatea de a crea o pagină gazdă (home page) care conţine, de obicei, informaţii personale şi profesionale. Practica creării unei pagini gazdă a apărut din necesitatea tehnică de definire a unei pagini ,,prestabilite" pe care browser-ele Web o afişează când se cer informaţii de la un server Web, dar nu se precizează decât numele calculatorului gazdă (host) sau numele calculatorului şi al unui director. Paginile gazdă sunt în mod tradiţional paginile de primul nivel pentru un server, o organizaţie sau o persoană. Atunci când sunt create de persoane particulare, paginile gazdă. Deseori este respectată tradiţia de legare a acestor pagini cu paginile corespondente ale unor colegi sau prieteni.

Web este un sistem flexibil de comunicaţie, care poate fi folosit în mai multe contexte, pornind de la comunicarea individuală, prin intermediul paginilor gazdă şi ajungând la comunicarea în masă.

Web pune la dispoziţie următoarele funcţii:

    • Distribuirea informaţiilor: Un browser Web oferă utilizatorului posibilitatea de vizualizare a informaţiilor din spatiul FTP sau hipertext. Structura hipertextului sporeşte posibilităţile de selectare ale utilizatorului, datorită căilor multiple în care pot fi urmate legăturile din hipertext. La aceasta, Java adaugă posibilitatea creării unor noi handlere de conţinut şi de protocol.
    • Comunicarea: Oamenii pot să folosească hipertextul Web ca să creeze forumuri pentru partajarea informaţiilor, discuţii, iar membrii unui grup de ajutor pot lua legătura unii cu ceilalţi. Conţinutul executabil Java introduce noi forme de comunicare interactivă.
    • Interacţiunea: Folosind programele de trecere, programatorii Web pot integra în aplicaţii un anumit grad de interactivitate, oferind utilizatorilor o cale de recepţionare a unor informaţii adaptate la întrebări, programele de trecere permit utilizatorilor să modifice o structură de date sau să adauge noi informaţii la aceasta. Limbajul Java face, datorită conţinutului executabil, posibil un grad superior de interactivitate.

În anul 1991, în Elveţia, a început dezvoltarea sistemului World Wide Web. Sistemul folosea tehnologia hipertext pentru integrarea de documente dispuse în Internet, în anul 1993 apărând pe Internet, oferindu-i o nouă dimensiune.

Lumea Internet este dominată de sintagma World Wide Web (W3).

W3 - este un set de programe care formează un sistem de comunicare şi informaţii hipertext folosind, în reţeaua Internet şi care funcţionează prin comunicare de date, pe baza unui model client-server.