java poo_1

download java poo_1

of 43

description

java p o o

Transcript of java poo_1

Lecia nr

PAGE 43

Lecia nr. 1

Noiuni introductive

1.1. Tipuri de limbaje de programare

Utilizarea unui sistem de calcul pentru ndeplinirea unei sarcini oarecare presupune, nainte de toate, definirea unui limbaj de comunicare ntre operatorul uman i calculator.

Iniial, modalitatea utilizat a fost transmiterea tuturor datelor i comenzilor sub form de coduri binare (grupuri de opt bii numite octei coninnd combinaii de 0 i 1). Aceast procedur presupunea un substanial efort intelectual din partea programatorului. Ulterior, s-a dezvoltat ceea ce se numete limbajul main, coninnd un set de cuvinte alfanumerice standard (cuvinte sau prescurtri din limba englez descriind aciunea comandat) ce nlocuiesc unul sau cteva dintre codurile numerice.

Odat cu dezvoltarea tehnicii de calcul i a soft-ului au aprut limbajele de programare de nivel nalt, care permit scrierea comenzilor destinate calculatorului cu ajutorul unor cuvinte numite instruciuni. Fiecare dintre aceste instruciuni reprezint o comand complex echivalent cu un set de comenzi n limbajul main. Exist la ora actual dou tipuri de limbaje de programare: procedurale i obiectuale.

Limbaje de programare procedurale sunt concepute pe principiul c n corpul programului se declar variabilele i constantele. Acestea sunt apoi disponibile pentru toate funciile de prelucrare ce se definesc n program.

Limbajele procedurale sunt foarte populare fiind larg utilizate pentru soluionarea unei game foarte diverse de aplicaii. Cele mai importante limbaje de programare procedurale sunt C, Pascal, Foxpro.

Pe lng ele au aprut limbaje specifice unor domenii de activitate avnd caracteristici specifice ce avantajeaz aplicaiile concrete din respectivele domenii (CIL pentru telecomunicaii, Ada pentru experimentele de inteligena artificial, etc.).

Programarea orientat pe obiecte este un sistem de programare care se bazeaz pe ideea de a trata blocurile de program ca pe nite entiti autonome (ncapsulate) denumite obiecte. Aceste obiecte se construiesc, se manifest i se distrug n cursul rulrii aplicaiei din care fac parte.

Avantajul esenial al acestei modaliti de a comunica cu computerul const n faptul c, beneficiind de ncapsulare, programatorii pot scrie programe performante, cu grad mare de complexitate, fr s fie nevoii s controleze fiecare detaliu al funcionrii sistemului de calcul.

Pe msur ce complexitatea softului a crescut, ncapsularea datelor i funciilor ce le prelucreaz n interiorul unor entiti numite obiecte a devenit foarte util. Aceste limbaje se numesc obiectuale. Datorit avantajelor lor evidente, aceste limbaje sunt n momentul de fa extrem de larg utilizate i tind s cucereasc supremaia n lumea programatorilor profesioniti.

Noiunea de clas este fundamentul pe baza cruia sunt concepute limbajele de programare obiectuale.

Clasa este o structur care cuprinde un model teoretic (tipar) coninnd descrierea unui tip de obiecte.

O clas conine: date membre reprezentnd proprietile obiectelor i funcii membre care au acces la aceste date i le pot prelucra. Cu excepia unor cazuri bine stabilite nici o alt funcie dect cele membre nu are acces la datele unei clase. Aceast proprietate se numete ncapsulare.

Avantajele limbajelor de programare orientate pe obiect n comparaie cu cele procedurale sunt:

ncapsularea datelor i metodelor n structuri clar definite;

Sigurana procesrii corecte a datelor;

Facilitarea lucrului n echip la un program;

Posibilitatea reutilizrii unor obiecte n alte aplicaii.

Cele mai cunoscute limbaje de programare orientate pe obiecte sunt C++ i Java. La ele se adaug o categorie special: limbajele vizuale, avnd drept caracteristic esenial faptul c au un set de obiecte predefinite din care se pot relativ uor construi programe extrem de performante i sofisticate.

ntre limbajele obiectuale exist de asemenea o serie de diferene specifice fiecrui limbaj n parte. Astfel, n vreme ce C++ este un limbaj care combin stilul procedural motenit de la C-ul clasic cu tehnica obiectelor, Java este un limbaj aproape pur obiectual i se manifest ca atare att la compilare, ct i la rulare.

Prima variant a limbajului Java a fost creat de o echip de cercettori ce au avut ca proiect realizarea unui limbaj simplu pentru a programa echipamentele electro-casnice (maini de splat rufe, automate de splat vesela, etc.). Limbajul trebuia s fie conceput astfel nct programele scrise n el s funcioneze identic indiferent de tipul de microprocesor folosit (diferit pentru unele loturi de produse).

Ulterior, aceast calitate s-a dovedit extrem de necesar i n cazul reelei Internet unde sunt interconectate sisteme de calcul diverse (PC, UNIX, Macintosh, etc.). n doar civa ani varianta iniial a fost dezvoltat, s-au creat biblioteci de clase i au aprut medii de programare specializate.

Independena de platform a limbajului Java este asigurat de dou caracteristici eseniale ale limbajului: Emularea mainii virtuale Java pe orice hardware i calitatea de Limbaj interpretat.

Java a evoluat n timp n principal prin adugarea de pachete suplimentare de clase la nucleul iniial API. Se poate considera c exist dou etape fundamentale denumite Java i Java2. Prima variant este orientat mai ales spre miniaplicaiile din interiorul paginilor HTML. A doua este mult mai dotat pentru a satisface necesitile realizrii unei game largi de aplicaii diverse (interfee grafice de utilizator, procesri de date, protocoale de comunicaii etc.).

T.1.1 Rspundei la urmtoarele ntrebri:

1. Care din urmtoarele limbaje sunt obiectuale:

a) C++;

b) Java;

c) FoxPro.

2. Care dintre urmtoarele afirmaii sunt adevrate:

a) Java este un limbaj pur obiectual;

b) Java este un limbaj procedural;

c) Java este independent de platform.

3. Clasele sunt:

a) Colecii de obiecte;

b) Proceduri de creare a obiectelor;

c) Definiiile teoretice ale obiectelor.

4. Diferena esenial ntre limbajele procedurale i cele obiectuale const n:

a) Declararea datelor;

b) Configurarea funciilor de procesare;

c) Organizarea datelor i funciilor n programe.

5. Limbajele vizuale sunt:

a) Limbajele procedurale derivate;

b) Limbajele obiectuale derivate;

c) Limbaje bazate pe familii de clase predefinite.

1.2. Obiecte i clase n programarea pe obiecte

Clasa fiind o definiie teoretic, un tipar, conine doar declararea tipurilor datelor i expresiile funciilor membre. Clasele sunt folosite pentru a crea obiecte. Obiectele sunt elementele funcionale ale programului n limbajul Java. n cursul rulrii ele sunt create, sunt utilizate i atunci cnd devin inutile, sunt distruse.

Obiectul reprezint materializarea n interiorul unui program a unei clase. El cuprinde valorile numerice efective ale datelor membre prezentate atunci cnd s-a declarat clasa.

Obiectele construite dup modelul definit de o clas sunt instane ale acelei clase. Din acest motiv crearea unui obiect se mai numete i instaniere.

Dac dintr-o clas se instaniaz mai multe obiecte, aceste obiecte, dei sunt asemntoare, reprezint entiti diferite n cadrul programului. Pentru fiecare dintre ele exist un spaiu de memorie separat i cte o copie autonom pentru fiecare variabil din componen. Acest spaiu este alocat atunci cnd se creeaz obiectul, este folosit pe parcursul vieii acestuia i este eliberat la distrugerea lui.

ntr-un program pot s existe mai multe clase, fiecare dintre ele avnd propriile obiecte. ntre clasele implicate n funcionarea programului respectiv pot s existe relaii de interdependen. De exemplu o clas poate s reprezinte un model general din care, n cursul dezvoltrii programului, se deriv subclase (modele particulare) care conin descrieri teoretice mai detaliate i, prin urmare, mai restrictive. De obicei n programe exist clase de baz sau printe i clase fiice sau derivate.

Clasa: Echip de fotbal

Obiecte:Rapid;

Poli Timioara;

Steaua;

U Craiova.

Subclasa: Echip de fotbal universitar

Obiecte:Poli Timioara;

U Craiova.

Subclasa: Echip de fotbal bucuretean

Obiecte:Steaua;

Rapid.

T.1.2.1 Organizai n dou subclase (Motorizate i Nemotorizate) urmtoarele obiecte ale clasei Mijloace de transport:

Skate-board-ul, Maina, Bicicleta, Tramvaiul, Trotuarul rulant.

Obiectele se creeaz cu ajutorul unui tip special de funcie numit constructor. Constructorul trebuie scris iniial cnd se definete clasa. Eliminarea unui obiect se face n C++ cu o funcie destructor ce trebuie de asemenea scris la definirea clasei. n Java calculatorul produce automat un destructor.

n C++ funciile membre pot fi inline, adic au codul scris chiar acolo unde sunt declarate n interiorul clasei, sau offline, adic n afara clasei. n Java funciile membre sunt denumite metode i sunt obligatoriu scrise n interiorul definiiei clasei. Acest fapt este compatibil att cu caracterul pur obiectual al limbajului ct i cu funcionarea efectiv a programelor.

T.1.2.2. Rspundei la urmtoarele ntrebri:

1. Dintr-o singur clas de baz se pot deriva:

a) O singur clas fiic;

b) Mai multe clase fiic;

c) Nu se pot deriva clasele.

2. n Java metodele sunt scrise:

a) n interiorul declaraiei clasei din care face parte;

b) n afara declaraiei clasei din care face parte;

c) Ambele.

3. Crearea unui obiect se face prin:

a) Instaniere;

b) Cu ajutorul unui constructor;

c) Prin simpla declarare.

4. Instanierea unui obiect produce:

a) Rezervarea spaiului n memorie pentru acel obiect;

b) Eliminarea clasei utilizate;

c) Atribuirea de valori pentru datele membre.

5. Clasele dintr-un program pot fi:

a) Independente;

b) Derivate dintr-o clas de baz;

c) Ambele.

1.3. Organizarea unui program n obiecte

Un program ntr-un limbaj procedural, cum este de exemplu limbajul C, conine ntotdeauna urmtoarele blocuri:

Zona include unde se face legtura cu bibliotecile;

Declararea constantelor i variabilelor externe;

Declararea funciilor;

Funcia main (corpul principal);

Expresiile funciilor.

La rndul lui corpul principal al programului, denumit funcia main, conine n interiorul su urmtoarele componente:

Declararea variabilelor i constantelor interne;

Alocri de spaiu n memorie;

Asignri variabile;

Operaii cu datele mai sus definite;

Apeluri la funcii.

n cazul programelor obiectuale cum este C++, spre deosebire de situaia descris anterior, aceast structur se modific radical deoarece trebuiesc declarate iniial clasele cu datele si funciile membre, apoi trebuiesc instaniate obiectele, procesate datele respectnd ncapsularea i n final distruse obiectele. Prin urmare structura programului devine:

Zona include unde se face legtura cu bibliotecile;

Declararea claselor;

Expresia funciilor membre off-line;

Declararea funciilor externe;

Funcia main cuprinznd instanieri de obiecte, procesri de date membre cu funcii membre ale aceleiai clase i eliminri de obiecte;

Expresiile funciilor externe.

Dac se opteaz pentru organizarea tip proiect clasele se pot plasa att n fiiere .h cat i n fiierele .cpp.

Limbajul Java este un limbaj obiectual pur, adic spre deosebire de C++ sau de varianta pe obiecte a Pascalului, care pstreaz parial caracteristicile motenite de la limbajele procedurale din care provin, n Java totul se desfoar cu i prin intermediul obiectelor. Nu exist o funcie main() a programului, ci una sau mai multe funcii executabile pentru fiecare clas.

Clasele Java sunt plasate dup compilare n cte un fiier separat cu extensia .class, chiar dac iniial n etapa de editare a programului clasele au fost toate definite n unul i acelai fiier, avnd extensia .java.

Mai mult dect att, aa cum se va arta n capitolul Clase utilizate ca date, tipurile simple de date cum sunt byte, int sau float pot fi definite att direct (precum n limbajele procedurale), ct i sub forma unor clase i utilizate ca atare.

import pachet_1;

.....

import pachet_M;

class Clasa_unu{

//declaraie clasa Clasa_unu

declaraii date membre Clasa_unu;

declaraii funcii membre (metode) Clasa_unu;

}

class Clasa_doi{

//declaraie clasa Clasa_doi

declaraii date membre Clasa_doi;

declaraii funcii membre (metode) Clasa_doi;

}

class Clasa_N{

//declaraie clasa Clasa_N

declaraii date membre Clasa_N;

declaraii funcii membre (metode) Clasa_N;

}

T.1.3.1 Schematizai dup exemplul de mai sus un program n Java care conine trei clase, fiecare dintre ele avnd cte dou date membre i cte o metod.

De multe ori, n cazul aplicaiilor complexe este indicat organizarea sub form de proiect, n care doar clasa principal este plasat ntr-un fiier cu extensia .java, iar celelalte clase sau familii de clase se pot grupa n fiiere bibliotec definite de utilizator. Dac rularea se face n cadrul unei pagini web, atunci proiectul conine una sau mai multe pagini .html. De asemenea n interiorul proiectului se gsesc fiiere de configurare a opiunilor de lucru. Proiectele prezint unele avantaje ntre care cele mai importante sunt: pstrarea automat a setului de opiuni ale mediului de programare (n fiiere de configurare) i posibilitatea includerii unor fiiere deja compilate n pachetul de fiiere utilizat.

O specificitate important a limbajului Java este legat de faptul c aplicaiile Java ruleaz la fel de bine pe un calculator PC compatibil IBM dotat cu Windows `95, `97, `98 sau NT, pe o staie Sun, pe un computer Apple McIntosh sau pe alte platforme. Acest lucru este posibil datorit faptului c pe toate acestea se realizeaz n fapt o emulare a unei maini virtuale, denumit main Java. Oricare dintre computerele enumerate poate fi folosit pentru editarea, compilarea i rularea programelor Java dac exist urmtoarele dou componente soft:

un editor capabil s creeze fiiere surs .java (preferabil i pagini .html), un browser capabil s lucreze cu Java.

Mediul Java Development Kit (JDK) este un editor simplu de utilizat i se poate gsi la site-ul limbajului Java: http://java.sun.com de unde poate fi descrcat cu ajutorul unui browser sau al unui program FTP. Fiecare tip de calculator are propriile particulariti i instalarea programului JDK prezint diferene specifice fiecruia. Detalii suplimentare despre aceste probleme i n general nouti cu privire la limbajul Java se pot gsi tot la adresa de Internet a firmei Sun, promotoarea limbajului Java: http://java.sun.comn ce privete browserele compatibile Java, cele mai performante dintre ele sunt: HotJava (scris complet n limbajul Java), Microsoft Internet Explorer i Netscape Navigator. Primul este disponibil la aceiai adres cu JDK. Celelalte dou, care sunt i cele mai rspndite, sunt produsele firmelor Microsoft (componente ale pachetului Windows) i Netscape (se poate descrca din pagina WEB: http://home.netscape.com) .

O alt variant de lucru este utilizarea pachetului Microsoft Development Studio for Java (MsDev) care are un editor pentru fiierele surs .java, unul pentru paginile .html i un browser incorporat care permite testarea programelor. MsDev este conceput s faciliteze lucrul n sistemul de proiect descris anterior.

Recent tot firma Microsoft a scos pe pia mediul de programare Microsoft Visual Java (MsVJ), o variant perfecionat a mediului MsDev, avnd multe similitudini ca funcionare i grafic cu acesta dar i o serie de diferene importante. Autorul a testat programele prezentate n aceast carte n mediile MsDev i MsVJ i nu a detectat incompatibiliti. Acest lucru provine i din utilizarea modului de lucru proiect, mod care conserv opiunile de configurare ale mediului.

T.1.3.2 Rspundei la urmtoarele ntrebri:

1. ntr-un program scris n limbajul Java se poate afla:

a) O singur clas;

b) Mai multe clase;

c) Nu se pun clasele n program, ci n biblioteci.

2. n limbajul Java tipurile simple de date pot fi definite:

a) n mod identic cu programele procedurale;

b) Sub forma unor clase;

c) n ambele moduri.

3. Dup compilare clasele Java se vor gsi plasate n:

a) Fiierul Java iniial;

b) Un fiier executabil cu extensia .exe;

c) n fiiere cu extensia .class separate.

4. Limbajul Java este independent de platform fiindc:

a) Este pur obiectual;

b) Ruleaz pe o main virtual emulat;

c) Nu folosete biblioteci de funcii.

5. Pentru scrierea unui proiect n limbajul Java sunt obligatoriu necesare:

a) Biblioteci de clase Java;

b) Editoare de fiiere java i html;

c) Un browser compatibil Java.

1.4. Concluzii

Programarea orientat pe obiecte este un sistem de programare care trateaz blocurile de program ca pe nite entiti autonome denumite obiecte. Aceste obiecte se construiesc, se manifest i se distrug n cursul rulrii aplicaiei din care fac parte.

Limbajul Java este un limbaj obiectual pur. Programele scrise n acest limbaj conin doar declaraii de clase. Chiar i tipurile simple de date cum sunt byte, int sau float pot fi definite sub forma unor clase i utilizate n consecin.

Clasa este o structur care cuprinde un model teoretic coninnd descrierea unui tip de obiecte. Obiectul reprezint materializarea n interiorul unui program a unei clase. El cuprinde valorile numerice efective ale datelor membre prezentate atunci cnd s-a declarat clasa.

Limbajul Java este independent de platform. Aplicaiile Java ruleaz la fel de bine pe calculatoare PC, Unix, Apple MacIntosh etc. Acest lucru este posibil datorit faptului c pe toate acestea se realizeaz n fapt o emulare a unei maini virtuale, denumit main Java. Oricare dintre computerele enumerate poate fi folosit pentru editarea, compilarea i rularea programelor Java dac exist urmtoarele dou componente soft: un editor de fiiere surs .java i un browser.

Autorul recomand utilizarea proiectelor ca form de lucru n Java, deoarece acest fapt implic un numr de avantaje i permite simplificarea procedurilor de transfer pe alte calculatoare a programelor.

Pentru a realiza un applet Java este necesar creerea unui proiect denumit conform dorinei programatorului i n cadrul su a dou fiiere:

un fiier cu codurile surs scrise n limbajul Java;

o pagin web scris n limbajul HTML.Rspunsuri

T.1.1.1 a,b.

T.1.1.2 a,c.

T.1.1.3 c.

T.1.1.4 c.

T.1.1.5 b.

T.1.2.1 Cele dou clase sunt:

Nemotorizate {Skate-board-ul, Bicicleta}

Motorizate {Maina, Tramvaiul, Trotuarul rulant}

T.1.2.2.1 b.

T.1.2.2.2 a.

T.1.2.2.3 a,b.

T.1.2.2.4 a,c.

T.1.2.2.5 a, b, c.

T.1.3.1 Structura programului este:

class Clasa_unu //declaraie clasa Clasa_unu

{

declaraie prima dat membr Clasa_unu;

declaraie a doua dat membr Clasa_unu;

declaraie metod Clasa_unu;

}

class Clasa_doi //declaraie clasa Clasa_doi

{

declaraie prima dat membr Clasa_doi;

declaraie a doua dat membr Clasa_doi;

declaraie metod Clasa_doi;

}

class Clasa_trei //declaraie clasa Clasa_trei

{

declaraie prima dat membr Clasa_trei;

declaraie a doua dat membr Clasa_trei;

declaraie metod Clasa_trei;

}

T.1.3.2.1 b.

T.1.3.2.2 a,b,c.

T.1.3.2.3 c.

T.1.3.2.4 b.

T.1.3.2.5 b, c.

T.1.4.1. Se execut operaiile specificate la Anexa 1. Efectul rulrii este prezentat n Figura 1.3.

T.1.4.2. Fiierul html rmne neschimbat. Fiierul surs java devine:

import java.awt.Graphics;

class Salut extends java.applet.Applet{

public void paint(Graphics Mesaj){

Mesaj.drawString("Hello from Java!",30,30);

}

}

Lecia nr. 2

Variabile i constante

2.1. Propoziii, expresii i blocuri

Fiecare aciune dintr-un program este codificat printr-o expresie compus din date i operatori. Mai multe asemenea expresii se pot grupa ntr-o propoziie. Fiecare propoziie se ncheie cu terminatorul ;.

n limbajul Java o linie de program se numete propoziie i cuprinde ntotdeauna o atribuire de valoare nsoit eventual de o operaie aritmetic sau logic.

O propoziie care cuprinde doar o atribuire de valoare.

i=1;

O propoziie care cuprinde o operaie aritmetic i o atribuire:

i=i+1;

O propoziie care cuprinde o operaie logic (SAU) i o atribuire:

i=a||b;

T.2.1.1. Scriei urmtoarele linii de program

a) Atribuirea valorii 5 variabilei x;

b) Atribuirea valorii raportului variabilelor a, b variabilei c;

c) Atribuirea valorii operaiei SAU a variabilelor a, b, c variabilei T.

Propoziiile sunt organizate n blocuri care sunt delimitate de paranteze acolade. Ele sunt denumite i propoziii complexe i reprezint un set de linii de program care se execut solidar.

Pentru a face sursele programelor n Java mai uor de neles, n cadrul acestora se pot introduce comentarii. Acestea pot s fie pe o singur linie sau pe mai multe linii (bloc de comentarii). Un comentariu pe o singura linie trebuie precedat de simbolurile //

Un bloc de comentarii se poate introduce n cadrul programului prin ncadrarea textului acestui comentariu ntre simbolurile /* i */ .

Evident se pot folosi /* i */ inclusiv n cazul unui comentariu pe o singur linie, dar varianta // este mai comod i mai eficient.

// Acesta este un comentariu pe o singur linie

/* Acesta este un comentariu

pe mai multe linii */

T.2.1.2. Scriei comentarii pentru fiecare din liniile din testul T.2.1.1. n ambele variante.

Autorul acestui curs recomand folosirea n mod regulat a comentariilor n cadrul programelor. Acestea permit att o mai facil nelegere a structurii codurilor de ctre alte persoane, ct i posibilitatea ca ulterior nsui autorul s-i reaminteasc ceea ce a fcut. Comentariile lmuritoare devin eseniale n cazul limbajelor obiectuale, unde este foarte frecvent utilizarea n cadrul unui program a unor familii de clase create de ali autori sau a unor clase create de programator nsui cu ocazia rezolvrii altor aplicaii.

T.2.1.3. Rspundei la urmtoarele ntrebri:

1. O propoziie poate cuprinde:

a) atribuire;

b) operaie matematic;

c) operaie logic.

2. Propoziiile pot fi:

a) Finalizate cu simbolul ;(capt de linie);

b) Formate din mai multe expresii;

c) Cuprinse in interiorul unei expresii.

3. Blocurile sunt:

a) Delimitate de paranteze acolade;

b) Compuse din propoziii;

c) Pri ale unui program.

4. Un comentariu pe un singur rnd trebuie marcat cu:

a) Simbolul { i } la cele dou capete;

b) Simbolul /* i */ la cele dou capete;

c) Simbolul // la nceput.

5. Comentariile sunt:

a) Elemente active ale programului;

b) Un tip de expresii Java;

c) Explicaii.

2.2. Variabile

Variabilele reprezint datele programului. Ele se utilizeaz pentru a nmagazina valorile numerice sau irurile de caractere. De asemenea, variabilele sunt folosite ca operanzi pentru operaiile aritmetice sau logice ce sunt executate n program.

O variabil se declar cu sintaxa:

tip_variabila nume_variabila;

sau n cazul n care la declarare se face i iniializarea, adic atribuirea unei valori variabilei declarate:

tip_variabila nume_variabila=valoare;

Acelai nume_variabila (identificator), dac este scris cu majuscule sau este scris cu litere mici este perceput de program drept dou entiti diferite. Numele conine caractere alfanumerice, dar nu poate ncepe cu o cifr i n-are voie s cuprind spaii ori caractere de genul %, * sau ?. Caracterele _ i $ sunt permise.

n Java variabilele sunt literale, numerice i booleene. Un char este o variabil pe 16 bii, deci variabila char trebuie s fie n domeniul -32768 i +32767. Variabilele literale multiple sunt denumite iruri de caractere.

char c = a;// c = variabil char creia i se atribuie

//valoarea caracterului ASCII a (64)

char nr = 27;

// variabil numr

byte s[10] = abcdef123;//variabil ir de caractere

T.2.2.1 Scriei urmtoarele linii de program:

a) Declararea i atribuirea valorii 123 variabilei nr;

b) Declararea i atribuirea valorii 123 variabilei crt;

c) Declararea i atribuirea valorilor 1, 2, 3 variabilelor s[0], s[1] i s[2].

Variabilele numerice ale limbajului Java pot s fie byte (octet), int (ntregi) i float (numere fracionare). Un byte cuprinde un numr care poate fi reprezentat binar cu maximum 8 bii, adic aflat ntre -128 i +127.

Un int este un numr ntreg ce se poate reprezenta n cod binar pe 32 de bii, adic este cuprins ntre -2147483648 i +2147483647. n situaiile n care este necesar n program o valoare ce excede aceast gam, se adaug un L sau un l la sfritul numrului i ntregul devine long, adic reprezentarea binar se face pe 64 de bii. Aceasta este un tip de variabil derivat. Alt tip derivat din int este short care corespunde cifrelor binare pe maxim 16 bii.

byte a=32;

//declarare i iniializarea variabil byte

byte a[5] = (3,5,8,2,7(;

//declarare i iniializarea ir variabile byte

int i = 123456;

//declarare i iniializarea variabil int

short sh = 248;

//declarare i iniializare variabil short

long l = 50000000000L;//declarare i iniializare variabil long int

Un numr fracionar se reprezint ca float pe maximum 32 de bii, iar ca double (tip derivat din float) pe 64 de bii. Variabilele booleene au valoarea adevrat sau fals (n englez true i false) i se declar cu sintaxa:

float f = 2.6;

//declarare i iniializare variabil float

double db = 5.6 e6;

//declarare i iniializarea variabil double

boolean Bool = true;

//declarare i iniializare variabil boolean

T.2.2.2. Scriei urmtoarele linii de program

a) Declararea i atribuirea valorii true variabilei alfa;

b) Declararea i atribuirea valorii 1,2456 variabilei c;

c) Declararea i atribuirea valorii g variabilei g.

Variabilele pot fi denumite cu identificatori alei dup dorina arbitrar a programatorului. n general se recomand utilizarea unor denumiri ct mai sugestive pentru a uura nelegerea codurilor surs ale programului. Aceste nume nu pot ns s coincid cu cuvintele rezervate ale limbajului Java date mai jos.

abstract

boolean

break

byte

case

cast

catch

char

class

const

continue

default do

double

float

for

future

genericgoto

if

implements

import

inner

instanceof

int

interface

long

native

new

null

operator

outer

package

private

protectedpublic

rest return

short

static

super

switch

syncronised

this

throw

transient

try

var

void

volatile

while

Tabel 2.1. Cuvinte rezervate ale limbajului Java

Exist n lista de mai sus cuvinte care nu sunt utilizate ca instruciuni n Java la ora actual dar sunt rezervate pentru o posibil utilizare ulterioar. Un exemplu de acest fel este goto.

T.2.2.3. De ce sunt greite i vor fi semnalizate ca erori la compilare urmtoarele linii de program:

a) int 2i;

b) char val%

c) double switch

Mediul de programare ajut la evitarea erorilor de acest ultim tip deoarece scoate n eviden prin colorare cuvintele de cod rezervate.

Cnd se dorete depozitarea unei variabile de un anumit tip ntr-un alt tip se execut operaia numit cast dup numele comenzii din limbaj care face acest lucru.

Sintaxa acestei comenzi este:

tip_vechi identificator1;

tip_nou identificator2=(tip_nou) identificator1;

Rezult prin urmare un identificator2 care are aceiai valoare cu identificatorul1 dar are alt tip. Sigur c valorile rmn egale doar dac prin cast nu se foreaz o rotunjire prin trunchiere.

O variabil double poate fi, spre exemplu, transformat prin cast ntr-o variabil de tip float.

double alfa;

float beta = (float) alfa;

Reprezentarea pe un numr mai mic de bii poate duce n cazul de mai sus la pierderea unei pri din zecimale. Acest aspect necesit o atenie special din partea programatorilor deoarece poate conduce la erori de rulare greu de depistat.

T.2.2.4. Executai o transformare prin cast a variabilei:

int i=100;

ntr-o variabil de tip short. Exist n acest caz erori de trunchiere?

Pentru variabilele de contor care se modific frecvent n cursul rulrii se utilizeaz volatile.

volatile tip_variabil nume_variabil;

n cazul unor bucle de ciclare, numrul de cicluri se contorizeaz cu un contor care se modific foarte frecvent. Deci este recomandabil utilizarea unor variabile volatile:

volatile int contor;

T.2.2.5. Rspundei la urmtoarele ntrebri

1. Sintaxa de declarare i iniializare a unei variabile este:

a) tip_variabila nume_variabila = valoare;

b) nume_variabila = valoare;

c) tip_variabila nume_variabila = expresie;

2. Sintaxa de asignare a unei variabile este:

a) tip_variabila nume_variabila = expresie;

b) nume_variabila =tip_variabila valoare;

c) nume_variabila =valoare;

3. Numele variabilelor trebuie s nu conin:

a) Cifre;

b) *,$;

c) Spaii libere.

4. Se recomand ca o variabil contor s fie declarat:

a) Clas;

b) volatile int;

c) volatile float.

5. Transformarea prin cast a variabilelor permite:

a) Executarea unor comparaii;

b) Executarea unor operaii ntre tipuri diferite;

c) Asignarea unei variabile de un tip cu valoarea unei alte variabile de tip diferit.

2.3. Constante

O constant Java se declar cu cuvntul de cod final cu sintaxa:

final tip_constant nume_constant=valoare;

n Java, ca de altfel n orice alt limbaj constantele reprezint o modalitate de a stabili limite fixe n desfurarea unor procese (cicluri repetitive, comparaii, etc.) din cadrul programelor.

O constant, odat declarat ca atare, nu mai poate fi modificat pe parcursul ntregului program, orice ncercare n acest sens producnd erori la compilare.

De obicei numele constantelor este scris cu o prim liter majuscul. Acest lucru nu este neaprat obligatoriu, dar a devenit o cutum larg rspndit n rndul programatorilor n Java i ajut la clarificarea programelor pentru ceilali.

Pentru declararea unei limite maxime ntr-un program se poate folosi linia de cod:

final int Max = 10;

T.2.3.1. Rspundei la urmtoarele ntrebri:

1. ntr-un program scris n Java o constant poate fi:

a) Declarat;

b) Iniializat;

c) Asignat.

2. Care din secvenele de mai jos sunt corecte:

a) final int A=0;

b) final int A=0; x=A;

c) final int A=0; A=A+1;

3. La compilare sunt semnalate ca erori:

a) Asignarea unei variabile cu valoarea unei constante;

b) Reutilizarea unei constante n acelai fiier;

c) Adunarea unei constante la o variabil.

4. O constant se poate utiliza pentru a stabili:

a) Un prag de comparaie;

b) Un numr de repetri ale unui ciclu;

c) O contorizare.

5. Diferena ntre o constant i o variabil n Java este:

a) Nici una;

b) Modul de iniializare;

c) Stabilitatea valorii.

2.4. Declarare, iniializare i asignare

n Java, ca i n celelalte limbaje de programare, fie ele obiectuale sau procedurale, definirea complet a unei variabile se face n trei etape distincte din punctul de vedere al limbajului:

Declararea variabilei; definirea numelui i tipului;

Iniializarea - stabilirea valorii iniiale;

Asignarea - atribuirea unei valori.

Indiferent de limbaj este obligatorie pstrarea acestei ordini a celor dou operaii, deoarece dac se ncearc asignarea unei variabile ce nu a fost anterior declarat, compilatorul nu va tii care este tipul ei i va da eroare.

Declararea se face cu o linie de program de forma: tip_variabila nume_variabila; prezentat n paragraful anterior. Aceast declarare poate fi individual (pentru o singur variabil) sau comun pentru mai multe variabile diferite avnd acelai tip, separate ntre ele cu cte o virgul.

Declararea variabilelor pas, r i test se face cu liniile de program de mai jos:

int pas ;

char r, test;

Iniializarea se poate face n etapa urmtoare printr-o expresie avnd urmtoarea sintax:

pas = 0;

r = 3;

test = 1;

T.2.4.1. Care din secvenele de program de mai jos vor produce erori de compilare?

a) int a;

b) int a, b; a=1;

c) int a; a=0

Exist ns posibilitatea de a face cele dou operaii ntr-o singur propoziie a programului avnd forma:

tip_variabil nume_variabil=valoare;

ceea ce nu contravine regulii stipulate mai sus. Aceast variant este aplicabil att n cazul declaraiilor individuale, ct i pentru cele multiple. i n acest caz separatorul utilizat este virgula.

int pas=0;

char r=100, test = 1;

n cursul programului utilizarea efectiv a variabilei conduce la cea de-a treia etap: atribuirea printr-o operaie de asignare, a unei valori diferite variabilei anterior declarate i iniializate.

Sintaxa operaiunii de asignare este dat aici n dou variante:

nume_variabil=valoare;

nume_variabil=expresie;

Prima variant corespunde situaiei n care n locaia de memorie corespunztoare variabilei se plaseaz o mrime scris explicit, iar cea de a doua, situaiei n care n locaia de memorie corespunztoare variabilei se plaseaz rezultatul evalurii unei expresii matematice sau logice.

De exemplu:

char r=0;// declarare i iniializare lui r cu valoarea 0

r = r+5;// se execut adunarea i apoi asignarea

O eroare foarte frecvent, mai ales n cazul nceptorilor n ale programrii este ncercarea de a face asignarea nainte de iniializarea unei variabile.

int pas;

// declarare fr iniializare

pas = pas+1;

// eroare, asignare variabil neiniializat

n situaia de mai sus eroarea este provocat de faptul c primul operand al adunrii nu are o valoare stabilit n momentul efecturii operaiei de adunare.

Din cele de mai sus rezult c expresiile de asignare se evalueaz de ctre computer de la dreapta la stnga. Acest aspect are drept consecin posibilitatea utilizrii variabilei r att ca operand n dreapta, ct i ca rezultat.

T.2.4.2. Care este eroarea n secvenele de program de mai jos:

a) int a; a=a+1;

b) int a=a+1;

c) int a=0; a=a+1;

Variabilele declarate n interiorul unui bloc sunt variabile locale i ele au ca durat de via timpul de rulare al acelui bloc. Aceast regul se aplic i n cazul blocurilor incluse.

{

//nceput bloc exterior

int x=2;

//declaraie i iniializare x

{

//nceput bloc interior

int y = 3;

//declaraie i iniializare y

x = x+y;

//x = 2 + 3 = 5

}

//sfrit bloc interior, y dispare

System.out.print(x);//tiprire x

System.out.print(y);//eroare y nu mai exist aici

}

//sfrit bloc exterior; x dispare

T.2.4.3. Rescriei blocul de program anterior astfel nct s fie corect. Exist mai multe variante de rspuns?

O variabil poate fi declarat external (extern) dac ea trebuie s fie disponibil n ntreg programul, sau poate fi definit static (static) - adic este disponibil n fiierul curent (n cazul aplicaiilor complexe programul este coninut n mai multe fiiere).

Sintaxa este:

external tip_variabil nume_variabil;

//fr asignare

external tip_variabil nume_variabil=valoare;

//cu asignare

static tip_variabil nume_variabil;

//fr asignare

static tip_variabil nume_variabil=valoare;

//cu asignare

De exemplu, pentru a declara o constant disponibil n ntreg programul se procedeaz astfel:

external final int Alfa;

//fr asignare

external final int Alfa=256;

//cu asignare

Declararea unei variabile volatile disponibil doar n fiierul curent se face conform modelului de mai jos:

static volatile int i;

//fr asignare

static volatie int i=1;

//cu asignare

n Java, regula din limbajele mai vechi privitoare la obligativitatea declarrii tuturor variabilelor la nceputul funciei n care sunt utilizate a fost abandonat. Evident ns, rmne obligatorie declararea i iniializarea naintea folosirii. n general, autorul consider c este totui recomandabil declararea tuturor variabilelor la nceputul blocului unde sunt utilizate.

Variabilele pot s fie simple, aa cum sunt cele din exemplele de mai sus sau pot s conin vectori i matrice cuprinznd mai multe date de acelai tip sub acelai nume. n cazul structurilor datele pot avea chiar i tipuri diferite. Caracteristicile specifice ale acestor variabile complexe se vor trata n capitolele dedicate lor.

T.2.4.4. Rspundei la urmtoarele ntrebri:

1. Asignarea unei variabile presupune obligatoriu:

a) Doar declararea variabilei;

b) Declararea i iniializarea variabilei;

c) Doar iniializarea variabilei.

2. n limbajul Java se poate combina:

a) Declararea i asignarea variabilei;

b) Declararea i iniializarea variabilei;

c) Iniializarea i asignarea variabilei.

3. O variabil local este disponibil:

a) n fiierul Java iniial;

b) n blocul n care au fost declarate;

c) n fiierul Java principal.

4. Declararea unei variabile externe se face cu sintaxa:

a) external nume_variabila=valoare;

b) external tip_variabil nume_variabil;

c) external tip_variabil nume_variabil= valoare;

5. Pentru a declara o constant disponibila doar n fiierul curent se scrie urmtoarea linie de program:

a) final volatile int i;

b) static volatie int i=1;

c) final volatile int j=1;2.5. Concluzii

n limbajul Java o linie de program se numete propoziie i cuprinde ntotdeauna o atribuire de valoare nsoit eventual de o operaie aritmetic sau logic. Mai multe propoziii formeaz blocuri.

n Java definirea complet a unei variabile se face n trei etape distincte din punctul de vedere al limbajului:

Declararea variabilei;

Iniializarea;

Asignarea.

Expresiile de asignare se evalueaz de ctre computer de la dreapta la stnga. Acest aspect are drept consecin posibilitatea utilizrii variabilei att ca operand n dreapta ct i ca rezultat.

Variabilele reprezint datele programului. Ele se utilizeaz pentru a nmagazina valorile numerice, sau irurile de caractere. De asemenea variabilele sunt folosite ca operanzi pentru operaiile aritmetice sau logice ce sunt executate n program.

Variabilele declarate n interiorul unui bloc sunt variabile locale i au ca durat de via timpul de rulare al acelui bloc. Aceast regul se aplic i n cazul blocurilor incluse. O variabil poate fi declarat extern, dac ea trebuie s fie disponibil n ntreg programul, sau poate fi definit static, fiind disponibil doar n fiierul curent.

Variabilele pot s fie simple sau pot s conin vectori i matrice cuprinznd mai multe date de acelai tip sub acelai nume.

n Java exist constantele care reprezint o modalitate de a stabili limite fixe n desfurarea unor procese (cicluri repetitive, comparaii, etc.) din cadrul programelor. O constant, odat declarat ca atare, nu mai poate fi modificat pe parcursul ntregului program, orice ncercare n acest sens producnd erori la compilare.

Rspunsuri

T.2.1.1.

a) x=5;

b) c=a/b;

c) T=a||b||c;

T.2.1.2.

a) x=5;//Atribuirea valorii 5 variabilei x

b) c=a/b;//Atribuirea valorii raportului variabilelor a, b variabilei c

c) T=a||b||c; //Atribuirea valorii operaiei SAU variabilei T

a) x=5;/*Atribuirea valorii 5 variabilei x */

b) c=a/b;/*Atribuirea valorii raportului variabilelor a, b variabilei c */

c) T=a||b||c; /*Atribuirea valorii operaiei SAU variabilei T*/

T.2.1.3.1 a, b, c

T.2.1.3.2 a, b

T.2.1.3.3 a, b, c

T.2.1.3.4 c

T.2.1.3.5 c

T.2.2.1.

a) short nr=123;

b) char nr=123;

c) int s[3]; s[0]=1; s[1]=2; s[2]=3;T.2.2.2.

a) boolean alfa=true;

b) char nr=123;

c) char g=g;T.2.2.3.

a) Identificatorul nu are voie s nceap cu un numr

b) Caracterul % este ilegal ntr-un identificator

c) switch este un cuvnt rezervat al limbajului Java

T.2.2.4. short a=(short)i;T.2.2.5.1 a, b

T.2.2.5.2 c

T.2.2.5.3 b, c

T.2.2.5.4 a, b

T.2.2.5.5 c

T.2.3.1.1 a, b

T.2.3.1.2 a, b

T.2.3.1.3 __

T.2.3.1.4 a, b

T.2.3.1.5 c

T.2.4.1. Nici una

T.2.4.2.

a) Variabila a nu este iniializat

b) Variabila a nu este iniializat

c) Secvena este corect

T.2.4.3.

{

//nceput bloc exterior

int x=2;

//declaraie i iniializare x

{

//nceput bloc interior

int y = 3;

//declaraie i iniializare y

x = x+y;

//x = 2 + 3 = 5

System.out.print(y); //tiprire y

}

//sfrit bloc interior, y dispare

System.out.print(x);

//tiprire x

}

//sfrit bloc exterior; x dispare

T.2.4.4.1. b

T.2.4.4.2. b

T.2.4.4.3. b

T.2.4.4.4. b, c

T.2.4.4.5. c

Lecia nr. 3

Instruciunile de baz ale limbajului Java

3.1. Operatori aritmetici i logici

n Java, ca i n alte limbaje de programare, exist operatori aritmetici i logici care permit procesarea datelor de intrare ale programului n vederea obinerii rezultatelor.

Toi aceti operatori se aplic fie unui singur operand, i atunci operatorul se numete unar, fie la doi operanzi, operatorul fiind n acest caz binar.

Sintaxa unui operator unar este:

operator variabil

Sintaxa unui operator binar este:

variabila1 operator variabila2

i++// operator aritmetic unar; incrementare cu o unitate

i-j// operator aritmetic binar

i= =j // operator logic binar; cercetarea egalitii valorilor

T.3.1.1. Scriei linii de program n care s se efectueze operaiile de mai sus cu operanzii x i y, atribuind eventual rezultatul variabilei z.

Utilizarea mai multor operatori n aceiai expresie face necesar stabilirea unor reguli de preceden, adic o ordine de execuie. Java respect precedena din algebr i de asemenea, faptul c operatorii unari preced pe cei binari. Schimbarea acestei precedene se face cu ajutorul parantezelor.

a*(b+c)// expresia se execut astfel: nti adunarea

// i apoi nmulirea

a(b-c/(d+e))// se admit paranteze multiple

T.3.1.2. Care este ordinea de desfurare a operaiilor de mai jos:

a) D = x(y/(a+b));

b) D = x(y/(a+b*(c+d)));

c) D = x(y/(a+b/(c+d));

Numrul parantezelor deschise trebuie, evident, s coincid cu cel al parantezelor nchise. n caz contrar compilatorul va protesta. Autorul dorete s atrag atenia asupra faptului c este necesar o atenie special acordat precedenei n etapa de scriere a programelor, deoarece erorile rezultate din nerespectarea ei sunt extrem de greu de depistat n faza de rulare.

Operaiile aritmetice unare ale limbajului Java sunt:

Negaia (-);

Incrementarea (++);

Decrementarea (--).

Operaiile aritmetice binare ale limbajului Java sunt:

Adunare (+);

Scdere (-);

Multiplicare (*);

Diviziune (/);

Modulo (%) restul mpririi primului operand cu al doilea.-i

i++ (i = i+1)

i-- (i = i - 1)

a + b

a b

a * b

a / b

a % 3

// daca a=7 a % 3=1

T.3.1.3. Scriei liniile de program n care s se efectueze operaiile aritmetice unare i binare cu operandul x, respectiv operanzii x i y, atribuind rezultatele variabilei z.

Unica operaie logic unar din limbajului Java este complementul pe bii (~). Operaiile logice binare ale limbajului Java sunt:

Negare boolean ( ! );

I pe bii ( & );

I pe octet ( && );

SAU pe bii ( | );

SAU pe octet ( || );

SAU EXCLUSIV( ^ ) Test egalitate(= =);

Test inegalitate (!=);

Deplasare stnga ( > )

Deplasare dreapta i umplere cu 0 ( >>> ).

~a! a

a & b

a | b

a ^ b

a = = b

a(=b

a2

a>>>4

T.3.1.4. Scriei linii de program n care s se efectueze operaiile logice unare i binare cu operanzii x i y atribuind rezultatul variabilei z.

Indiferent de tipul lor, toi operatorii se folosesc n expresii de asignare de tipul celor analizate n capitolul anterior sau n conjuncie cu instruciunile de control ale fluxului care se vor prezenta n paragraful urmtor.

T.3.1.5. Rspundei la urmtoarele ntrebri:

1. O propoziie poate cuprinde:

a) Mai multe operaii aritmetice i logice;

b) operaie aritmetic;

c) operaie logic.

2. Operaiile pot fi:

a) Aritmetice sau logice;

b) Unare sau binare;

c) Simple sau compuse.

3. Ordinea de execuie a operaiilor este dat de:

a) Regulile de preceden din algebr;

b) Ordinea de scriere de la stnga la dreapta;

c) Structura parantezelor.

4. Operaiile aritmetice binare se ncheie ntotdeauna cu:

a) Un comentariu;

b) atribuire;

c) iniializare.

5. Unica operaie logic binar este:

a) Negaia;

b) Deplasarea;

c) Testul de egalitate.

3.2. Controlul fluxului

Instruciunile de control ale fluxului sau ale execuiei sunt acele instruciuni care decid, funcie de starea unor parametrii cureni, modul n care se va continua execuia programului. Limbajul Java are, ca i alte limbaje, dou tipuri de asemenea instruciuni:

instruciuni condiionale,

instruciuni de ciclare sau bucle.

Instruciunile condiionale au sintaxa general:

instruciune_condiional(test) propoziie

ceea ce semnific faptul c expresiile cuprinse n propoziie se execut doar dac este satisfcut testul.

Cea mai utilizat instruciune condiional este if...else a crei sintax are 3 variante. Varianta cu if simplu:

if(test) propoziie

Varianta if ... else:

if(test) propoziie 1

else propoziie 2

Condiii multiple

if(test1) propoziie 1

else if(test2) propoziie 2

else if(test3) propoziie 3

:

else if(testN-1)propoziie N-1

else propoziie N

care produce execuia acelei propoziii care are testul corespunztor ndeplinit sau execuia propoziiei N dac nu se satisface nici un test.

if(p>y;

T.3.1.5.1 a, c

T.3.1.5.2. a, b

T.3.1.5.3. a, c

T.3.1.5.4. b

T.3.1.5.5.

T.3.2.1.

if(x