Sunteți pe pagina 1din 12

ALGORITMI, METODE DE REPREZENTARE,

PROGRAM

Notiunea de algoritm, isi are originea in Uzbekistan in Khiva,


reprezentind pentru domeniul informaticii o metoda generala de rezolvare a
unui anumit tip de problema.
Algoritmul este un concept folosit in mod intuitiv pentru a desemna o
multime finita si ordonata de operatii.
Algoritmul transforma anumite cantitati (numite date initiale sau de
intrare) in rezultate finale (date de iesire) in conformitate cu o multime de
reguli, trecind printr-un numar finit de etape intermediare (pasi).
(Date de intrare) (Date de iesire)

Rezolvarea cu ajutorul calculatorului a oricarei probleme presupune


algoritmizarea prealabila a acesteia. Algoritmul implica insa un numar finit de
operatii care se efectueaza intr-un timp rezonabil de lung.
Pina in prezent notiunea de algoritm nu are o definitie suficient de
riguroasa, ea fiind considerata o notiune primitiva.
Proprietatile algoritmilor, sunt urmatoarele:
-claritate, adica ori ce algoritm trebuie sa fie caracterizat printr-o
descriere precisa fara ambiguitati
-universalitate, adica algoritmul poate fi aplicat asupra unui numar mare,
eventual infinit de intrari
-finitudine, adica algoritmul este finit in spatiu (ca descriere) si in timp
( ca executie)
Odata cu elaborarea unui algoritm acesta trebuie prezentat sub o forma
cit mai precisa si clara pentru a putea fi transpus sub forma unui program
acceptat de calculator.
Reprezentarea (descrierea) algoritmilor, se realizeaza cu:
-limbaje dedicate formalizate, cum ar fi ALGOL, ALGorithmical
Language)
-pseudolimbaj, ce poate fi conventional sau neconventional
-schema logica, ce este un fel de reprezentare grafica a algoritmului.
Principalele obiecte cu care lucreaza algoritmul sunt:
-data
-variabila
-operator
-expresie, notiuni ce urmeaza a fi definite in cadrul lucrarii.
Programul, reprezinta exprimarea algoritmului intr-un limbaj de
programare.
Studiul algoritmilor, implica:
-elaborarea
-exprimarea
-validarea
-analiza , algoritmilor precum si testarea programelor prin depanare si
trasare.
Eficienta algoritmilor este determinata prin:
-analiza aposteriori (empirica) ce se realizeaza dupa implementare
-analiza apriori (teoretica) ce se realizeaza inainte de implementare
-analiza hibrida, ce contine cele doua metode precedente, fiind metoda
cea mai folosita.
Eficienta algoritmilor este in general analizata din punct de vedere,
d.p.d.v., al:
-timpului de lucru
-memoriei utilizate.
Tratarea algoritmilor poate fi facuta considerind algoritmi:
-liniari, in cazul in care necesita un timp de lucru de orinul n, n fiind
ordinul de marime ales pentru aplicatia data.
-patratici, cubici, polinomiali, un timp de ordinul n2, n3, …, nk.
-exponentiali, cu un timp de odinul en.
Tratarea algoritmilor se face privind cazurile:
-mediu, caz ce se trateaza relativ dificil
-cazul cel mai favorabil si cel mai nefavorabil, cazuri ce sunt mai usor de
evaluat.

1.2. LIMBAJ DE PROGRAMARE

Prin programarea calculatoarelor intelegem ansamblul comunicarii OM-


masina.
Prin program utilizatorul transmite masinii un algoritm.
Programatorul poate invata limbajul masinii pentru a-i transmite ceea ce
doreste dar in acest caz el se va lovi de urmatoarele dezavantaje:
-este dificil de programat
-un program masina va functiona numai pe acel tip de masini.
Folosirea unei alte masini va insemna modificarea sau rescrierea programului
respectiv
-depanarea eventualelor erori strecurate in program este
anevoioasa.
Pentru a elimina aceste neajunsuri au fost inventate limbajele de programare.
Limbajele de programare sunt mijloace de comunicare intre OM si
masina avind un vocabular apropiat de limbajul uman dar si niste reguli
precise lipsite de ambiguitate ce il apropie de rigurozitatea matematica.
Utilizatorul va fi confruntat astfel cu 3 universuri:
-al calculatorului
-al limbajului
-al problemei de rezolvat.

Deci un limbaj de programare este un intermediar intre realitatea


reprezentarilor utilizatorului asupra problemei de realizat si realitatea
calculatorului. Se observa ca in cazul folosirii unui limbaj de programare este
necesara o etapa in plus, compilarea, pentru traducerea programului din
limbajul de programare in instructiuni ale masinii folosite.
In general un limbaj de programare se poate defini prin sintaxa si
semantica lui, precum si prin detalii privind respectiva implementare ce ar
putea impune diverse restrictii sau extensii.
Prin sintaxa unui limbaj de programare se intelege un set de reguli ce
guverneaza alcatuirea programelor. Definirea sintaxei unui limbaj de
programare se face in general cu ajutorul unui metalimbaj cum ar fi BNF
(Backus Naur Form).
Prin semantica se intelege un set de reguli ce determina semnificatia
propozitiilor unui limbaj.
Un limbaj de programare este in general implementat pe un anumit tip de
calculator cu ajutorul unui program numit compilator. Compilatorul are mai
multe scopuri:
-verifica corectitudinea ori carui text scris in cadrul acestui limbaj de
programare, verificare ce se face d.p.d.v. sintactic si a unor aspecte semantice
-duce la obtinerea unei forme intermediare a programului ce contine pe
de o parte structura sintactica a programului si pe de alta parte informatii
referitoare la atributele semantice ale diferitelor unitati sintactice din program,
operatii efectuate in cadrul fazei de analiza. Tot in cadrul compilarii in cadrul
fazei de sinteza se efectueaza o optimizare a codului intermediar obtinut
generindu-se asa numitul program obiect.
Programul initial scris intr-un limbaj de programare, il vom numi
program sursa (PS) iar programul obtinut ca urmare a compilarii il vom numi
program obiect, (PO).
Un limbaj de programare poate fi si de tip interpretor. In acest caz se
executa pe un calculator real sau virtual un program scris intr-un limbaj sursa
diferit de cel al masinii. Interpretorul presupune analiza programului si apoi
executia lui instructiune cu instructiune. Diferenta fata de un compilator este
ca nu produce un program obiect care urmeaza a fi folosit in vederea executarii
programului, ci executa instructiune cu instructiune acest program.
Interpretorul este mai usor de implementat dar este ineficient in comparatie cu
un compilator mai ales in ceea ce priveste timpul de executie al programului.
Limbajele de programare sunt rezultatul unei evolutii determinata in
principal de evolutia calculatoarelor precum si intr-o masura cel putin la fel de
importanta de necesitatea rezolvarii unor probleme complexe.
Programarea primelor calculatoare se facea in limbajul propriu al
calculatorului, asa numitul program (cod) masina. Un program reprezentat in
acest fel era o succesiune de 0 si 1 introduse la anumite adrese de memorie.
Utilizatorul unor astfel de calculatoare isi comunica programul prin actionarea
unor butoane, a unor comutatoare sau prin cablarea unor panouri. Odata
realizat un astfel de program el nu putea fi folosit decit pe acel calculator.
Necesitatea unor prelucrari tot mai complexe au impus trecerea la
programarea simbolica prin utilizarea limbajelor de asamblare si apoi a
limbajelor de nivel inalt. Acest salt a usurat modul de scriere a programelor si
mai ales a asigurat independenta programarii fata de hardware-ul
calculatorului.
Ultimii ani incearca sa introduca asa numita programare bazata pe
limbaje naturale, programare ce ar trebui sa fie mult mai usoara utilizatorului
simplu al unui calculator.
Limbajele de programare se pot clasifica intr-un mod relativ nerigid
astfel:
1. d.p.d.v. al dependentei de hard-ul calculatorului putem avea limbaje:
-de nivel coborit (limbaj masina si limbaj de asmblare)
-de nivel inalt (ce nu depind de structura hard)
-de nivel intermediar (mixt), (limbaje naturale si limbaje paralele).
2. d.p.d.v. al facilitatilor puse la dispozitia utilizatorilor in timpul compilarii:
-limbaje conversationale
-limbaje neconversationale (neinteractive).
3. d.p.d.v. al prelucrarilor pe care le efectueaza:
-procedurale, (majoritatea limbajelor care au fost folosite), bazate
pe comenzi adresate calculatorului
-neprocedurale, (orientate spre aplicatii si nu spre gestiunea
resurselor calculatorului), in care succesiunea instructiunilor in cadrul
unui program nu influenteaza decit in mica masura succesiunea
executarii lor
-obiectuale (majoritatea limbajelor actuale), vom reveni la o
prezentare mai pe larg a acestor concepte
-multi-agent, (o continuare a celor obiectuale dar care pot fi
incluse in cadrul limbajelor obiectuale).

Evolutia limbajelor de programare.


Primele limbaje de programare, asa numitele limbaje clasice (FORTRAN,
BASIC), nu asigurau siguranta in programare datorita modului initial in care au
fost proiectate, aceste limbaje evoluind si ele in timp.
Pentru a mari siguranta in functionare a aparut limbajul MODULA care
introducea notiunea de modul. Acest limbaj asigura inchiderea vizibilitatii
numelor in cadrul modulului aparind necesitatea definirii in fiecare modul a
unor liste de import/export.
Apoi limbajul PASCAL aduce noi imbunatatirisi anume:
-introduce tipizarea si reguli de compatibilitate intre tipuri
-introduce notiunea de compilare separata, ce permite pastrarea unor
module separat pe un suport, etc.
Pentru fiecare modul in PASCAL vom avea o parte de specificare si o
parte de implementare. De asemenea pe linga cresterea sigurantei in
functionare apar si alte avantaje pentru programatori si anume posibilitatea de
a ascunde datele si detaliile de implementare.
In continuare limbajele ADA, CHILL si MODULA-2 aduc facilitati ce
permitind programarea concurenta cu aplicatii in conducerea proceselor
paralele, limbajul CHILL fiind dezvoltat pentru telefonie si telecomunicatii.
Necesitatile practice au dus la dezvoltarea si a unor limbaje ce permit
programarea paralela, OCCAM, C Paralel, etc. Acest mod de programare este
optim pe arhitecturile paralele care sunt tot mai mult folosite, paralelismul
putind fi simulat soft daca arhitectura hard nu o permite.
Este de remarcat ca in literatura de specialitate aWatt,1990i,
aGiumale,1997i, exista dezvoltata o teorie bine precizata asupra limbajelor de
programare, evolutia lor precum si modalitatile in care au fost ele impuse pe
piata. Utilizatorii din domeniul comercial, majoritatea celor ce folosesc
calculatorul ca si instrument in realizarea unor aplicatii folosesc programarea
procedurala si limbaje de tip obiectual si imperativ. In acest sens vorbim in
special de limbajele Fortran, Algol, Pascal, C, C++, Ada, Simula, Smaltalk,
Eiffel, Java.
In domeniul academic mai ales precum si in cadrul unor aplicatii
deosebite se foloseste programarea declarativa (ca o reprezentare unitara
simbolica a datelor si programelor, avind un model matematic al limbajului), cu
folosirea limbajelor functionale si a celor logice. Cele mai reprezentative
limbaje in cadrul acestui domeniu sunt Lisp, ML, Haskell, Prolog.
In cadrul prezentei lucrari se va prezenta in limbajul C si unele elemente
ale limbajului C++, limbaje destinate in special dezvoltarii unor aplicatii care sa
foloseaca facilitatile masinilor precum si avantajele programarii de nivel inalt.
Este de remarcat ca se pot scrie programe structurate in limbajul
FORTRAN, programe ce ofera securitatea datelor in C, dar efortul de
implementare nu se justifica deoarece aceste limbaje nu sprijina aceste tehnici
de programare. Nu este cel mai important lucru faptul ca un limbaj poseda o
posibilitate pe care alt limbaj nu o are, ci faptul ca vor fi exploatate facilitatile
proprii limbajului care sa-i confere stilul de programare dorit in domeniul
pentru care a fost gindit.

1.3. PRINCIPIILE PROGRAMARII


In domeniul programarii sunt considerate mai multe principii de baza asa
numitele principii ale programarii. Aceste principii sunt:
-modularitatea, principiu ce se bazeaza pe diminuarea complexitatii unei
probleme prin descompunerea acesteia in componente relativ independente,
numite module
-abstractizarea, principiu ce se refera la separarea atributelor sau
caracteristicilor unui obiect pentru a le pune in evidenta doar pe cele necesare
la un moment dat.
In acest caz se evidentiaza proprietatile comune (intr-un context dat) a
mai multor obiecte, ignorindu-se pentru moment diferentele existente.
-uniformitatea, principiu ce se refera la folosirea unei notatii libere, a
unor structuri standard si a unor reguli care sa asigure accesibilitatea,
flexibilitatea si standardizarea in programare precum si consistenta
programelor
-localizarea, principiu ce se refera la localizarea de masini, subrutine,
fisiere, etc., care unesc intr-un tot obiecte cu proprietati comune asupra carora
putindu-se actiona mult mai eficient
-ascunderea informatiilor, (acoperirii) principiu ce se refera la faptul ca
structura de date nu este cunoscuta decit in momentul definirii ei, toate
functiile fiind deci definite pe structuri de date. In acest caz in exterior se
observa doar operatiile ce se efectueaza cu aceste date, scotindu-se in
evidenta elementele esentiale fata de cele neesentiale..
Este de remarcat ca aceste principii au stat la baza definirii notiunii de
programare structurata, stil de programare inca folosit si in momentul de fata.
Prin programare structurata se intelege tehnica rezultata din combinarea
principiilor modularizarii, abstractizarii si localizarii informatiilor. In cadrul
lucrarii vor fi prezentate de asemenea considerentele specifice programarii
orientate pe obiect, P.O.O sau O.O.P. (Object Oriented Programming).

1.4. ARHITECTURA CALCULATOARELOR

In continuare vor fi prezentate citeva elemente de baza referitoare la


arhitectura calculatoarelor de tip von Neuman, arhitectura inca des folosita de
catre utilizatorii obisnuiti (desi procesoarele se adapteaza si altor arhitecturi
mult mai evoluate).
Elementele de baza ale acestei arhitecturi sunt:
-unitatea centala, U.C., sau procesorul ce administreaza prelucrarea
informatiilor
-memoria interna, M.I., pentru depozitarea informatiilor
-dispozitivele periferice, D.P., ce asigura comunicarea dintre U.C. si M.I.
cu exteriorul. Aceste D.P. pot fi:
-de intrare
-de iesire
-mixte.
In cadrul unui calculator putem vorbi de:
-tastatura, prin care se transmit catre calculator comenzi cu ajutorul
simbolurilor
-ecranul, (displayul) folosit pentru comunicarea informatiilor cu
exteriorul
-mouse-ul (sau track ball sau IntelliMouse) pentru interactiunea rapida cu
calculatorul
-imprimanta
-discuri flexibile si magneto-optice,
-discuri de memorare de tip dur (Whinchester), HD
-compact discuri CD, inscriptibile sau doar read only
-streamere
-scanere
-plotere
-placi de sunet, fax-modem, etc.

Organizarea memoriei interne intr-un calculator

Memoria interna este organizata in:


-cifre binare 0 sau 1, numiti biti
-octeti, bytes, formati din 8 biti avind pina la 256 de valori
-cuvinte, ce pot fi de 2, 4, 8, etc. octeti sau alte dimensiuni nu neaparat
multipli de octeti
-adresa, numarul de ordine al unui octet in memorie
-locatia, zona fizica de memorie rezervata unei anumite informatii. In
locatii pot fi adresele altor locatii de memorie, informatia de aici fiind
considerata referinta.

1.5. TIPURI DE NUMERE REPREZENTABILE IN CALCULATOR

In memoria interna se reprezinta doar numere naturale folosind bitii 0 si


1, dar conventiile introduse permit reprezentarea de numere:
-negative
-reale
-caractere, etc.
Aceste conventii folosesc totdeauna numere naturale ce sunt totdeauna
pozitive. Principalele conventii utilizate in cadrul reprezentarii numerelor in
calculatoare sunt:
-a) pentru numere intregi cu semn, se folosesc doua numere naturale:
-primul cu 2 valori posibile 0-pozitiv, 1-negativ, numit semnul
-al doilea, valoarea absoluta a numarului.
Aceasta conventie de reprezentare se numeste C2, conventia
complement fata de 2 si implica reprezentarea numerelor negative prin
complementul fata de 1 a valorii lor absolute si adunarea valorii 1 la rezultatul
obtinut.
Exemplu:
Numar: 1
Reprezentare: 00000001
C1: 11111110
C2: +1
Reprez. -1: 11111111

In aceasta conventie:
Numar: 0
Reprezentare: 00000000

Numar: -128
Reprezentare: 10000000 si nu este -0 lucru ce se justifica prin:

Numar: 128
Reprezentare: 10000000
C1: 01111111
C2: +1
Reprez. -128: 10000000 deci 128 si -128 au aceiasi reprezentare, iar
conventia C2 spune ca se pastreaza reprezentarea pentru -128 cea pentru 128
fiind eliminata si in acest caz pe 8 biti pot fi reprezentante valori intregi i intre:
-27 <= i <= 27 - 1, iar in cazul in care avem reprezentarea pentru n cifre
putem reprezenta numere intregi in C2 in intervalul:
-2n-1 <= i <= 2n-1 - 1.

-b)pentru reprezentarea numerelor reale, se folosesc:


-un numar pentru a memora citeva (sau toate) cifre (le) semnificative ale
numarului, asa numita mantisa reprezentatata ca un numar cu semn
-un alt numar, legat de ordinul de marime al numarului real ce va fi
reprezentat, numit exponent.
De obicei se impune ca virgula este plasata imediat in fata cifrelor
semnificative ale numarului, si ca in fata mantisei este o singura cifra zero, 0,
in acest caz aceasta conventie de reprezentare a numerelor reale este
conventia pentru numere normalizate ea ducind la o reprezentare de forma:
0.mantisa Eexponent, unde E=28 = 256.
Daca exponentul este foarte mare si pozitiv avem un numar real foarte
mare, iar daca exponentul este foarte mare si negativ avem un numar real
foarte mic.
Aceasta conventie de reprezentare cu mutarea virgulei si deci
modificarea adecvata a exponentului duce la numere fractionare care in
limbajul calculatorului se numesc numere in virgula mobila sau flotante. Cu
aceasta conventie nu se pot reprezenta toate numerele reale, dar se pot
efectua calcule cu o anumita precizie, in general rezonabila. In calculator in
general numerele flotante sunt reprezentate in simpla precizie sau dubla
precizie functie de numarul de octeti rezervati pentru mantisa.

2. REPREZENTAREA INFORMATIILOR CU OBIECTE

2.1. NOTIUNEA DE OBIECT

In calculator dorim in general sa reprezentam informatii complexe care


sa descrie obiectele fizice sau notiunile din lumea reala, notiuni ce sunt destul
de complexe. Toate aceste notiuni sau obiecte care vor fi caracterizate prin
proprietati specifice (trasaturi) vor fi reprezentate in calculator prin date
(numere naturale in conventia C2 sau flotante normalizate). Numerele vor
ocupa o zona compacta in memorie, zona pe care o vom numi obiect (pentru
calculator).
Observatie:
Obiectul fizic sau notiunile din realitate sunt foarte complexe
neexprimabile doar prin aceste proprietati caracteristice, astfel incit 2 copii
identice ale unui obiect in realitate este foarte greu de obtinut, (vezi clonare
pentru fiinte vii), dar in cadrul unui calculator se copiaza zona de memorie
aferenta obiectului si se obtine o copie a obiectului din calculator.
Cind analizam un obiect fizic sau notiuni din lumea reala pentru a le
reprezenta in calculator trebuie sa consideram:
-proprietatile acestora
-modul in care pot fi utilizate obiectele, dar si
-operatiile (metodele) ce pot fi executate asupra sau cu ajutorul
obiectelor.
Multimea de operatii va trebui sa o redefinim ulterior in contextul
multimii de numere care formeaza proprietatile obiectului din memoria
calculatorului si sa-l descompunem in operatii numerice preexistente.
Prin comportamentul unui obiect, intelegem multimea de operatii
specifice unui obiect impreuna cu modul in care reactioneaza la stimuli
exteriori.
Din punct de vedere al programarii, un obiect este o reprezentare in
memoria calculatorului a proprietatilor si a comportamentului unei notiuni sau
ale unui obiect real.

Exemplu:

Obiectul minge are:


-proprietati referitoare la: -material (Piele, Plastic, etc.)
-dimensiune (Raza)
-culoare (Alba cu picatele negre, Rosie, etc.)
-pozitie (x, y, z)
-comportament definit prin:
-operatii ca:
-muta
-arunca
-umfla
-modul de reactionare:
-sare
-trece prin plasa, etc.

2.2. INCAPSULAREA INFORMATIILOR IN INTERIORUL OBIECTELOR

Procesul de incapsulare este procesul ascunderii detaliilor neimportante


sau sensibile de constructie a obiectului. Scopul incapsularii este de a proteja
impotriva distrugerii accidentale si nu in vederea necunoasterii lor (a detaliilor)
de catre utilizator.
Pot fi incapsulate (protejate) atit proprietatile obiectelor cit si operatiile.
Deci un obiect va fi privit:
-ca o multime de valori care formeaza miezul obiectului, (date) si
-ca o multime de operatii (proceduri, metode) ce imbraca aceste
valori, protejindu-le.
Din exterior se va vedea doar:
-modul de apel al operatiilor
-rezultatele apelurilor.
In practica programarii este nevoie de o rafinare a gradului de protejare a
fiecarei operatii sau proprietati pentru a putea specifica observatorii care au
acces (PUBLIC) si care nu au acces (PRIVATE, PROTECTED) la proprietatile si
operatiile obiectului.
Pe baza protejarii (incapsularii) proprietatilor si operatiilor ce se pot
executa cu ajutorul unui obiect, utilizatorul este independent de detaliile
constructive ale obiectului respectiv.
Structura interna a obiectului poate fi astfel schimbata si perfectionata in
timp fara ca functionalitatea de baza sa fie afectata.

2.3. CLASE DE OBIECTE

Familiile de obiecte sunt descrise in general (cum ar fi familia mingilor)


prin:
-proprietati in general o singura data
-operatii (metode, proceduri) care pot fi executate.
Exemplu:
Nu toate obiectele minge sunt identice, diferenta dintre ele fiind data de
valorile proprietatilor care sunt marimi numerice variabile (difera de la un
obiect la altul).
In concluzie proprietatile sunt aceleasi dar valorile lor sunt diferite.
De asemenea operatiile sunt si ele intotdeauna aceleasi, dar rezultatul
aplicarii lor poate sa fie diferit functie de valorile proprietatilor si de unele
valori exterioare acestora.
(Mingea se ridica in aer dupa ce o bati functie de material, dimensiunea
mingii, viteza de aruncare, conditii meteo, etc.).
Deci obiectele cu care lucram fac parte totdeauna dintr-o familie mai
mare de obiecte cu proprietati si comportament similar, familii ce se vor numi,
clase de obiecte, sau concepte.
In principiu :
CLASA= DATE + OPERATII, dar de fapt clasa se refera la
proprietati si nu la date, datele fiind doar valorile unor proprietati.
Obiectul ce apartine unei anumite clase, il vom numi instanta a acelei
clase.
Exemplu:
Clasa de obiecte mingi = toate obiectele minge din lume
Obiectul Minge_WorldCup = o instanta a acestei clase care are:
-proprietatile,
-operatiile, definite la fel ca la toate mingile doar ca valorile
proprietatilor (datele) sunt altele, pielea are culori specifice, diametrul este unul
prestabilit de FIFA, etc.
In concluzie valorile proprietatilor difera de la o instanta la alta (obiect la
altul) si ele se vor numi variabile ale unei clase de obiecte.
Operatiile sunt insa aceleasi si le vom numi metode pentru o anumita
clasa.
Exemplu:
In C++ declararea clasei de numere complexe se face prin:
class complex
A
double real;
double imag; //variabile de instantiere protejate cu acces prin
metode
public:
double modul()
A
return sqrt(real*real + imag*imag);
S
double arg();
void adcomplex(complex *a, complex *b);
void sccomplex(complex *a, complex *b);
S; /* clasa complex */
Declaratia:
complex z,z1,z2; //declara 3 obiecte de tip complex si anume z, z1, z2
Definirea unei clase consta din:
-declararea, adica insiruirea de elemente ale clasei date (variabile,
proprietati) si functii (metode)
-implementarea acelei clase, adica sectiunea din program care
implementeaza functiile declarate ca apartinind clasei (daca nu sunt inline). In
C++ accesul la elemente date si functii se face cu operatorul punct “.”, ele fiind
membre ale unui tip de data (sau cu ajutorul pointerilor).
Ca si o concluzie precizam:
-o clasa de obiecte este o descriere a proprietatilor si operatiilor
specifice unui nou tip de probleme reprezentabila in memorie.
-o instanta a unei clase de obiecte este un obiect de memorie ce
respecta descrierea clasei
-o variabila a unei clase de obiecte este o proprietate a clasei respective
ce poate lua valori diferite in instante diferite ale clasei
-o metoda a unei clase este descrierea unei operatii specifice clasei
respective.
Metodele sunt memorate o singura data pentru toate obiectele.
Comportarea diferita a obiectelor este data de faptul ca ele depind de valorile
variabilelor.
Exista clase de obiecte care nu se pot instantia in mod direct, si asta
pentru ca nu avem suficiente informatii pentru a le construi.
Exemplu:
Conceptul OM nu-l putem instantia, nu stim daca este Barbat sau
Femeie, etc.
Putem insa instantia conceptul Barbat sau Femeie ce sunt subconcepte
ale conceptului OM.
O asemenea clasa neinstantiabila, care serveste in general pentru
definirea unor proprietati sau operatii comune ale mai multor clase si care
permit generalizarea operatiilor referitoare la aceste clase se numeste clasa
abstracta.
In cadrul clasei OM putem defini:
-metoda de alimentare, valabila la amindoua subconcepte Barbat
respectiv Femeie
-metoda de comportament social este insa diferita la cele doua
subconcepte deci netoda de comportament social la nivelul conceptului OM
este abstracta.
Aceasta metoda insa se poate defini la nivelul subconceptului Barbat
respectiv Femeie astfel incit aceste concepte sa fie instantiabile.
Deci, o clasa de obiecte care are cel putin o metoda abstracta, devine o
clasa de obiecte abstracta si nu poate fi instantiata, adica nu i s-au precizat
suficient de clar metodele astfel incit ea sa poata fi folosita direct.