Warning Nu esti autentificat. Te rog autentifica-te sau inregistreaza-te pentru a avea acces la toate facilitatile forumului.
SkullBox  
Noiembrie 22, 2008, 02:51:54 pm
Bine ai venit, Vizitator. Trebuie să te autentifici sau să îţi creezi un cont.
Ai pierdut sau nu ai primit emailul care conţine codul de activare al contului?

Autentifică-te cu numele de utilizator, parola şi precizează durata sesiunii.
Noutăţi: ImageSL - Gazduire de imagini, gratuita
 
 SkullBoxDirector webTutoriale  Pagina principală   Ajutor Caută Autentificare Creează un cont  
Pagini: [1]
  Imprimă  
Subiect: OOP again  (Citit de 1165 ori)
0Utilizatori şi 1 Vizitatori
!_30
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 563



WWW
OOP again, Noiembrie 26, 2006, 12:48:33 pm

In incercarea mea de a intelege OOP-ul ( programarea pe obiecte ) din Java , am dedus urmatoarele chestii ( care doresc , ca cei care se pricep la OOP , sa mi le clarifice , macar daca oi fi inteles bine ).

-practic o clasa ( class ) in Java ( nu neparat Java ) , este structura sau recordul din C sau Pascal. O clasa este un tip de date , pe care il definim noi , nu este predefinit  , ca alte tipuri de date gen int , String , boolean.

-practic un obiect , cum se spune , este o instanta a acelei clase . Alta Marie cu alta palarie.In C de exemplu , avem o structura nume apoi o variabila leo care este de tipul nume : struct nume leo . In Java , un obiect este cam tot ceva de genu , insa , cand spunem nume leo ( tinand cont ca nume este clasa ) , nu creem obiectul , si pointam catre obiect . Cine a zis ca in Java se scapa de pointeri ? Ei exista , insa in mod indirect , deoarece acel leo e un pointer catre locul unde se afla obiectul in memorie ( heap ) , nu adevaratul obiect.

leo = new name(); creeaza adevaraul obiect.

Este intersant , ca intr'o structura C , putem declara mai mutle variabile de orice tip , si de exemplu , daca avem nevoie ca la un student sa tinem niste valori ( nume , medie ) , putem face un vector si e ok ( la mai multi studenti ).In Java , mai apar si metodele , practic , nu mai e nevoie sa ne mai chinuim , in C nu am vazut sa se poate declara functii in interiorul structuri , am vazut in Pascal constructuri in interiorul recordurilor.

Si acum inteleg , de ce Java e "pur pe obiecte" , si de ce altii zic ca nu ar fi pura . E simplu , chiar daca eu nu as avea nevoie de o structura , Java ma obliga ca orice program sa contina macar o clasa ( structura ) . De aici cred ca vine puritatea programarii pe obiecte in Java , desi nu te obliga sa creezi neaparat un obiect , si doar o clasa default.

Sper sa fi inteles bine , dar daca am gresit ceva , rog sa mi se pointeze greselile !  :?
Memorat

We live in a very special time in the evolution of the universe: the time at which we can observationally verify that we live in a very special time in the evolution of the universe!" (John Timmer)
Blog
3Nigma
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 969


SkullBox Guardian


WWW
OOP again, Noiembrie 26, 2006, 01:28:13 pm

Ok poate te ajut eu... avand in vedere ca C# seamana izbitor cu Java asa cum juice a observat sa clarific unele situatii:
Citat
practic o clasa (  class  ) in Java ( nu neparat Java ) , este  structura  sau  recordul  din C sau Pascal. O clasa este un tip de date , pe care il  definim  noi ,  nu este predefinit , ca alte tipuri de date gen int , String , boolean.

Da si nu ... da este asemanator cu struct-ul din C si este predefinita.Toate clasele mostenesc clasa Object!

Ai pomenit undeva ca in Java se lucreaza cu instante de clase.Da asa este...se lucreaza cu copii ale acelui obiect..exact ca si cand ai declara o variabila,se incarca in memorie o copie a structurii variabilei si cu aceea se lucreaza!
Citat
leo = new name(); creeaza adevaraul obiect.


new name() reprezinta apelul la un nou obiect de tip name ... acesta este Constructorul obiectului name
De retinut cand lucram cu constructori:
-> Constructorii nu returneaza nici o valoare
-> Constructorii se declara public intr-o clasa
Model:
Citat
public ()
{
//instructiuni
}


Ca un adaos... se poate lucra direct cu metodele,propreitatile,variabilele unei clase daca variabilele,metodele,proprietatile din clasa respectiva contin in delcarare cuvantul cheie static.Verifica cuvintele cheie la declarare ca sunt foarte importante...
atunci...nu am mai fi nevoiti sa declaram
Citat
nume leo=new nume()

ci am lucra direct cu functiile obiectului..asta daca am avea nevoie Smile :
Citat
nume....
nume. ...
nume. ...

Citat
Java ma obliga ca orice program sa contina macar o clasa ( structura )

Dap...acum vezi trecerea de la programarea traditionala la POO.

Sper ca te-am lamurit cu ceva 8)
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
!_30
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 563



WWW
OOP again, Noiembrie 26, 2006, 03:10:16 pm

Mersi 3Nigma .

Incep , din ce in ce sa ma prind ce si cum . Dupa parerea mea , cea mai mare greutate aparenta a programarii orientate pe obiecte , este ca totul de la inceput face parte dintr'o clasa , ceea ce te incurca tare ( Ce , Cum ) ? , apoi apar obiectele si constructori , care te incurca si mai tare.

Defapt , toate acestea apar sa'ti usureze munca , dupa cum e mai greu sa'ti dai seama.

Practic in orice clasa exista un constructor fie acesta default . Constructorul are rolul , un rol foarte important de a trece peste initializarea variabilelor default in ce valori vrem noi .
Poate limbajul nu e tocma' ala bun .

Practic sa inteleg , ca cea mai mare "smecherie" a POO-ului , este chestia intre static si public .

Cand e static , procedurile + cea principala ( metodele sa le zicem asa , ca pot fi si functii ) , lucreaza direct cu variabilele si metodele ( daca ale ) are CLASEI , insa daca nu sunt statice ( doar ale clasei ) , putem crea obiecte ( sa le zicem elemente ale unei structuri C . da si nu ) , care sa aiba valori diferite si scopuri diferite (chiar de la inceput prin constructori ).


Interesant , cum spuneam mai devreme , de ce se zice ca se elimina pointeri ? in Java . Se elimina faptul manual de a lucra cu ei . Nu trebuie sa ne mai chinuim cu ei , si totul e preluat de Java Dynamic.

Interesant e ca in Pascal de exemplu ( trebuie ca utlizatorul sa dezocupe manual memoria ) insa in Java se ocupa singur ( te scuteste de efort ) . Va ganditii ca la o aplicatie mare , care consuma memorie frumusel , ce s'a intampla .

Totusi , de ce consuma oare Java atatea resurse ? :lol:

P.S. : Care mai este rostul sa declaram un obiect ( fie el de tip clasa , interfara , vector ) , daca nu aloca spatiu de memorie , nimic ? Doar ii spunem interpretorului , vezi ca s'ar putea ?! :shock:
Memorat

We live in a very special time in the evolution of the universe: the time at which we can observationally verify that we live in a very special time in the evolution of the universe!" (John Timmer)
Blog
3Nigma
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 969


SkullBox Guardian


WWW
OOP again, Noiembrie 26, 2006, 04:06:10 pm

Citat
Practic sa inteleg , ca cea mai mare "smecherie" a POO-ului , este chestia intre static si  public .

Nu sunt sigur ca static intra in categoria de keyword asemeni public-ului. din cate stiu eu .. in c# cel putin ... modul de declarare functie este
Citat
()
{
//instructiuni

[return ()variabila;]
}

public,private intra la
internal,static,etc intra la

Desi nu sunt sigur ca asa este si la Java te rog documenteaza-te...si spune-mi si mie Tongue

Citat
Interesant e ca in Pascal de exemplu ( trebuie ca utlizatorul sa dezocupe manual memoria ) insa in Java se ocupa singur ( te scuteste de efort ) . Va ganditii ca la o aplicatie mare , care consuma memorie frumusel , ce s'a intampla .

Tehnica asta este mostenita si de C# si se numeste sugestiv garbage collection.Problema e ca programatorul nu paote cere ca garbage collection-ul sa se petreaca la un anumit timp dorit.

Un exemplu concret:
Citat
nume leo=new nume();
//lucram cu instanta obiectului nume ...si anume...leo
.
.
.
//nu mai avem nevoie de obiect asa ca nu mai are rost sa-l tinem in memorie...il descarcam
leo=null
.
//alte intructiuni
.
.
//la un moment dat incepe garbage collectionul care elibereaza resursele ocupate de "leo"


Frumusetea este ca..daca exista un constructor normal ar trebui sa fie si un [bdistructor[/b],nu? Ei bine..poate stiai..daca nu stiai...afla ca este,dar este optional.
Model de dinstructor:
Citat
~()
{
//instructiuni
}


Distructorul se apeleaza automat odata cu garbage collection.

Citat
Totusi , de ce consuma oare Java atatea resurse ?

Habar n-am...cineva...vreo idee? juice parca era cu java..poate ne lamureste el.. (daca mai intra)  Smile

Citat
P.S. : Care mai este rostul sa declaram un obiect ( fie el de tip clasa , interfara , vector ) , daca nu aloca spatiu de memorie , nimic ? Doar ii spunem interpretorului , vezi ca s'ar putea ?!

Te referi la ceva de genul:
Citat
nume leo

sau la ce? da-mi un exemplu te rog.

P.S : Acum as avea eu o intrebare...ce dumnezeu este o interfata(interface) am auzit ca este un stack de delegati...nush daca exista termenul asta in java... sunt curios ce ai inteles tu prin interface ca eu nu ii vad rostul?
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
!_30
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 563



WWW
OOP again, Noiembrie 26, 2006, 05:12:16 pm

Da , am cam prins rostu' la obiecte , constructori si clase . E chiar fun . Mai ales ca'ti ofera o programare mai structurata decat cea procedurala . Iti dai seama de asta , cand treci pe POO.

Am facut o mini-aplicatie in Java ( care nu face decat sa calculeze aria unui patrat / cerc / triunghi dreptunghic , insa doloseste si metode , clase , constructori si obiecte ). Nu ca ar fi mare branza ,ca nu e .. dar poate mai indemn pe unu' altu sa se mai apuce de Java , ca e frumos , si ... poate candva o noua sectiune Java . Cand or mai fi adepti .

Cod:


public class arie {
    // aceasta este o clasa , care este folosita pentru a calcula niste arii
   
    int latura; // pentru patrat si pentru triunghi
    int raza; // pentru cerc
    static final double PI=3.14; // tot pentru cerc*/
    int inaltime,lungime; // triunghi dreptunghic
   
    // niste constructori pentru diferitele figuri
    static  int are(int A)
    {
        return(A*A);
    }
    static double are1(int A)

    {
        double aria;
        aria=(PI*A)*A;
        return(aria);
    }
   
    static double are2(int a,int b)
    {
        double aria;
        aria=(a*b)/2;
        return(aria);
    }
    arie(int nr)
    {
        latura=nr;
    }
    arie(int nr1,int nr2)
    {
        inaltime=nr1;
        lungime=nr2;
       
    }
   
  public static void main ( String[] args)
{
     
    // patrat cu latura de 2 cm ..

   arie patrat;
   patrat = new arie(2);
   System.out.print("Aria unui patrat cu latura de 2 cm este ");
   System.out.println(are(patrat.latura));
   
   // aria unui cerc cu raza 4
   
   arie cerc;
   cerc = new arie(4);
   System.out.print("Aria unui cerc cu raza de 4 cm este ");
   System.out.println(are1(cerc.latura));
   
   // aria triunghi dreptunghic , unde se da inaltimea si ipotenuza
   
   arie tri;
   tri = new arie(2,4);
   System.out.print("Aria unui triunghi dreptunghic inaltime 2 , ipotenuza 4 : ");
   System.out.print(are2(tri.inaltime,tri.lungime));
   
    }
}



Have fun . :headbang:
Memorat

We live in a very special time in the evolution of the universe: the time at which we can observationally verify that we live in a very special time in the evolution of the universe!" (John Timmer)
Blog
3Nigma
Hero Member
*****
Deconectat Deconectat

Gen: Bărbat
Mesaje: 969


SkullBox Guardian


WWW
OOP again, Noiembrie 26, 2006, 06:28:05 pm

Citat
Mai ales ca'ti ofera o programare mai structurata decat cea procedurala

Indeed...totul pentru o ordine ierarhica a obiectelor . Dar taman aceasta ordine ii sperie pe multi sa invete POO! Pana cand se apuca...noi le-am taiat drumul Tongue
Memorat


Search for knowledge in the darkest places and in the blackest hours! You might get lucky and find more than you are looking for...
juice
Newbie
*
Deconectat Deconectat

Mesaje: 39


OOP again, Noiembrie 27, 2006, 10:39:09 pm

Salutare Smile
Scuze mai intai pentru perioada de inactivitate , se abat asupra mea limbaje de programare fara nesimtire si nu prea imi mai fac timp pentru una alta , grr
Chestia cu resursele:
- Java e o masina virtuala in primul rand.
Masina Virtuala Java reprezinta un calculator abstract.
De retinut : O aplicaþie de sine statatoare, scrisa în Java, e compilata si ruleaza pe o asa numita Masina Virtuala Java.
Cum sa va inchipuiti ca lucreaza Java; java nu are acces direct la resursele sistemului cum ar fi spre exemplu sub unix apelurile sistem sau alte operatii in care userul interactioneaza direct cu kernelul.
Java mai pe inteles , e ca un fel de minge care e amplasata intr-o camera denumita Windows/Linux/alte So.
E si normal ca sa pape resurse si sa fie mai putin eficient din punctul de vedere al performantei si a timpului de executie.
Java , la fel ca si calculatoarele reale, dispune de un set de instructiuni, un set de registre si utilizeazã diferite zone de memorie. Acestea sunt componente logice abstracte. Ele nu impun o implementare anume, aceasta insemnand ca Masina Virtuala Java se poate implementa ca interpretor de cod binar, compilator (genereazã cod nativ), sau pe Siliciu, dar sa se pastreze functionalitatea.
Daca luam exemplu un program in java , acesta se comporta la fel si in windos si in linux , nici o diferenta. In cazul doririi pastrarii structurii de date pe windows si pe linux la fel (scrierea informatiilor in fisiere , ca o paranteza in paranteza , a obiectelor de fapt) se poate folosi serializarea, documentatii in scopul serializarii sunt destule , in primul rand recomand documentatia de pe java.sun.com ,API-urile(Application PRogramming Interface) de acolo sunt foarte utile, precum si alte site-uri : http://java.sun.com/developer/technicalArticles/Programming/serialization/ , www.javapractices.com.
Instructiunile binare Java prelucreazã operanzii din memoria de date a Masinii Virtuale Java, ca apartinand unui grup redus de tipuri primitive (întreg lung, numere in virgula flotanta cu simpla si dubla precizie, octet, si intreg scurt.
Registrii Masinii Virtuale Java psstreaza starea acesteia in timpul operatiilor, la fel ca si registrii microprocesoarelor. Masina Virtuala Java are patru regiºtrii:
� pc � numaratorul de program
� optop � pointer catre varful stivei de operanzi
� frame � pointer catre mediul de executie a metodei curente
� vars � pointer catre prima variabila locala a metodei curente (variabila cu indexul 0).

Maºina Virtualã Java defineºte fiecare registru ca fiind de 32 biti. Anumite implementari pot sa nu utilizeze toti registrii (ex. Daca se genereazã cod nativ, atunci nu mai avem nevoie de pc).

Maºina virtualã Java este bazata pe stiva, nu foloseste registrii pentru transferuri de parametrii, aceasta fiind o decizie luata în favoarea simplitatii codului si, totodata, permite implementare eficienta pe diferite procesoare gazda, care au un numar redus de registrii, cum ar fi cele din familia x86.
Ar mai fi foarte multe de spus despre Java , e foarte vasta campia in ceea ce priveste subiectul curent , cum ar vi stiva java , garbage colelctor-ul , rezerva de constante , stiva de operanzi , structura fisierului .class ce pastreaza codul compilat pentru clasele si interfetele Java , etc.
Google rezolva orice , sau ..aproape orice:)
class Bafta{
       public static void main(String args[]){
          System.out.println("Bafta Tongue");
          }
       }
Memorat

mE mY seLF aND I
HostGator
Newbie
*
Mesaje: Multe

Reclamă cu aligatori
 

Ai auzit de aligatorul care ofera hosting?
 
   
Pagini: [1]
  Imprimă  
 
Schimbă forumul:  

Creat cu MySQL Creat cu PHP Ethical hacking and programming community Director web romanesc cu inscriere gratuita Validat cu XHTML 1.0! Validat cu CSS!
IPFind, FAQDB, LAMP.ro, Good Proxy, Aberez.EU, RoFreeSBIE, ShockingSoft.com, HostVision, Invatam.net, PC Troubleshooting, Curs valutar online
Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
Traducerea în limba română © 2006-2007 www.smf.ro