Începeți programarea programului java pentru primul salut lume

Să încercăm să înțelegem de ce Java este selectat în proiectele moderne ca fiind principalul limbaj de programare.

Sintaxă asemănătoare C *

În momentul creării limbajului Java, cel mai popular limbaj de programare a fost C ++. Pentru a "atrage" programatorii noii tehnologii Java, sa hotărât să fie cât mai asemănătoare cu C ++, luând cât mai bine posibil.







Java și C ++ nu sunt singurele care au o sintaxă similară. Progenitorul C ++ a fost C (C), astfel încât toate limbile care folosesc această sintaxă sunt numite c-like, și există o mulțime de ele (Wikipedia: familia C).

Astfel, dacă sunteți deja familiarizat cu cel puțin una dintre aceste limbi, atunci abundența punctelor, parantezelor și parantezelor din Java vă va părea ceva familiar și familiar de mult timp. Pe de altă parte, după ce ați studiat sintaxa Java, va fi mult mai ușor să înțelegeți alte limbi ale acestei familii.

* Sintaxa este un set de reguli pe care trebuie să le corespundă textul programului. Într-un mod simplu: ce arată programul. Mai dificil - pe wiki.

Limba generală

Prin desemnarea lor, limbile de programare sunt:

  • Special (rezolvarea problemelor într-o anumită industrie, de exemplu, în matematică Fortran, în baze de date SQL);
  • scop general (rezolvarea unei game largi de sarcini în orice industrie, de exemplu C ++, Java, C #).

Java aparține celui de-al doilea tip, este un limbaj cu scop general, pe care puteți scrie aproape orice program. Până în prezent, programele Java sunt create la orice nivel de complexitate: de la programarea aparatelor de uz casnic și a dispozitivelor mobile (Java ME) la servicii complexe încărcate (Java EE).

  • universal, rezolvă orice problemă
  • în unele industrii este inferior (din punct de vedere al vitezei de operare și al utilizării ușoare) la limbile de specialitate

Orientată obiect

Toate programele de calculator încearcă să descrie procesele lumii noastre în comenzile procesorului. Deoarece calculatorul nu cunoaște nimic despre obiectele lumii noastre, programatorul a trebuit întotdeauna să "traducă" totul în limba figurilor și instrucțiunilor. Așa a fost până în anii 70, până când a apărut paradigma de programare orientată spre obiect. Cu ajutorul lui, a fost posibil să se programeze la nivelul obiectelor din lumea noastră, și nu la nivelul figurilor din lumea calculatoarelor.

De exemplu, aici este descrierea a două tabele într-o formă non-obiect:

  • lungimea primei mese: 1200 mm
  • lățimea primei mese: 500 mm
  • înălțimea primei mese: 1000 mm
  • lungimea celei de-a doua mese: 1300 mm
  • lățimea mesei a doua: 600 mm
  • înălțimea celei de-a doua mese: 1100 mm

Între parametrii nu există nicio conexiune, cu excepția numelor acestora. Puteți face ușor o greșeală în încercarea de a calcula suprafața mesei: înmulțiți lungimea tabelului FIRST cu lățimea SECOND.

Exemplu de descriere orientată pe obiecte:

În acest caz, nu funcționăm deja cu parametri disparați, ci cu obiecte întregi: primul tabel și al doilea tabel.

Programele scrise în limbi orientate pe obiecte au fost executate mai lent și acesta a fost principalul motiv pentru care această paradigmă a devenit populară abia în anii 90, când "fierul" era gata pentru ea.

Java, ca aproape toate limbile moderne, este un limbaj orientat pe obiecte care simulează procesele din lumea reală și profită din plin de abordarea orientată spre obiecte.

  • OOP este utilizat în multe alte limbi de programare
  • utilizează pe scară largă abstracțiile
  • este ușor să modelăm obiecte din lumea reală
  • necesită studii suplimentare și dezvoltarea gândirii abstracte

funcțional

Când trebuie să reduceți timpul de execuție al programului, există două modalități evidente:

  1. Optimizați programul;
  2. Măriți frecvența procesorului.

Cu optimizarea avem următoarele probleme:

  • Optimizați toate programele;
  • există o limită logică, dincolo de care este imposibil să se optimizeze.

Accelerarea procesorului rezolvă această problemă și accelerează executarea tuturor programelor simultan.

Datorită legii lui Moore, lumea a dezvoltat a doua cale - a accelerat procesatorii. Legea prevede că frecvența procesatorilor ar trebui să se dubleze la fiecare doi ani. Dar odată ce legea lui Moore a încetat să mai lucreze și frecvența a încetat să crească. Și am încetat să mai primim accelerația cerută de programele noastre. În tot timpul acuzat Moura, a spus că el nu a înțeles toate acestea, și legea modificat: nu frecvența este dublat, dar numărul de tranzistori!

Astfel, frecvența procesoarelor nu a crescut în ultimii ani, dar numărul de tranzistoare crește. Tranzistorii sunt cheltuite pe nuclee suplimentare de procesoare. Dar, dacă vă uitați la cele două metode de accelerare a programelor de mai sus, nu are niciun rost să adăugați kernel-uri. Că programul ar putea fi accelerat cu ajutorul unor nuclee suplimentare - ar trebui să fie capabil să fie realizat de părți independente.







Dar pentru a face acest lucru nu este atât de ușor: toate piesele programelor depind una de cealaltă, depind de datele generale (mai ales când vine vorba de programarea orientată pe obiecte).

Apoi, programarea funcțională vine la salvare, ceea ce minimizează (și în mod ideal exclude complet) utilizarea datelor comune, ceea ce face ca programul să fie ușor și ușor de utilizat pe diferite nuclee.

Obiectiv orientat paradigma a durat 20 de ani pentru a merge de la teorie la folosirea în masă. Cunoscând cât de rapid se schimbă acum lumea noastră, s-ar putea crede că aceasta este o excepție de la reguli și noi luăm totul noi mult mai rapid și mai mult cu voie bună.

Cu toate acestea, paradigma funcțională a programării a necesitat mult mai mult timp decât programarea orientată pe obiecte. Pentru prima dată această paradigmă a fost introdusă în anii '30, dar în masele largi programarea funcțională începe să intre doar în zilele noastre.

Există limbi pe deplin funcționale (Haskel, Erlang) și hibride - combinând abordările orientate pe obiecte și funcționale (Scala, C ++).

De la versiunea 8, Java a achiziționat mecanisme de programare funcționale (cum ar fi referințe de funcții și expresii lambda), ceea ce face ușor crearea de programe care pot rula pe mai multe nuclee simultan.

  • sunt disponibile noi tehnici de programare
  • programele care pot utiliza simultan mai multe nuclee de procesoare sunt create cu ușurință
  • necesită studii suplimentare și dezvoltarea gândirii funcționale (matematice)

Tipărire: strictă, statică, explicită

Introducere strictă

Judecând după nume, dacă tastarea este strictă, atunci există câteva reguli care nu pot fi încălcate.

Exemplu (trebuie să înțelegeți că șirurile și numerele sunt diferite tipuri de date):

Adăugarea a două numere și două linii, indiferent de modelul de tipizare, este aceeași peste tot:

Diferența este atunci când noi (probabil din greșeală) încercăm să adăugăm un număr și un șir:

5 + "5" =. (10 sau "55")

O limbă bine tipată va spune că eroarea este ascunsă aici și ne face să aducem în mod explicit totul la un singur tip.

Nu este strict tiparit, va începe să șiretească: va recurge la un set suplimentar de reguli pentru cazul necorespondenței tipurilor. În funcție de aceste reguli, va fi selectată una dintre următoarele opțiuni:

  1. Șirul "5" va fi un număr, iar rezultatul va fi 10 (adăugarea de numere)
  2. Numărul "5" va deveni un șir și rezultatul va fi "55" (concatenare șir)

Se pare că, dacă nu introduceți cu strictețe, din greșeală, putem încerca să efectuăm o operațiune pe tipuri de date incompatibile și, în funcție de "regulile suplimentare", obțineți un rezultat diferit: 10 sau "55".

În Java se utilizează o versiune strictă, care preferă să raporteze o eroare și să determine programatorul să conducă în mod explicit la un anumit tip, evitând astfel setul de "reguli suplimentare". în cazul în care tipurile nu se potrivesc.

  • Nu există reguli suplimentare pentru conversiile de tip automat: acestea nu trebuie să fie cunoscute și nu există erori în conversia greșită
  • Înțelegerea tipologiei vine repede
  • toate transformările necesare trebuie să fie efectuate în mod explicit

Încrucișarea statică

Deoarece tipurile tuturor variabilelor din Java sunt determinate static la momentul compilării, este posibil să se verifice dacă aceste tipuri sunt utilizate corect. De exemplu, dacă încercăm să trimitem o mașină unui medic veterinar - Java ne va spune că medicul veterinar nu acceptă obiecte de acest tip. Prin urmare, aflăm despre eroare de îndată ce încercăm să compilam codul, și nu când executăm aplicația pe server.

Astfel, Java evită întreaga clasă de erori (erori de incompatibilitate de tipuri), deoarece toate acestea apar la timpul de compilare datorită tipăririi statice.

În mod normal, în zilele noastre nimeni nu scrie cod în notebook și nu compilează din linia de comandă - toate aceste instrumente pot face instrumente de dezvoltare IDE moderne (IDEA, Eclipse, NetBeans). Iar toate aceste IDE utilizează în mod activ faptul că tastarea este statică și verificarea erorilor înainte de a încerca să compilam codul.

Un alt plus de scriere statică este faptul că IDE poate să indice ce metode și proprietăți are obiectul. Acest lucru simplifică foarte mult atât dezvoltarea, cât și formarea.

  • învață despre erorile tipurilor incompatibile la timpul de compilare (folosind IDE-ul la momentul scrierii codului) și nu la timpul de execuție
  • cunoașterea tipului de date IDE poate determina ce operații pot fi efectuate cu acesta (foarte util, în special la etapele inițiale de cunoaștere a limbii)
  • trebuie să definiți singur tipurile

Tastarea explicită

Pentru a declara o variabilă în Java, trebuie să specificați în mod explicit tipul acesteia. De exemplu, o variabilă i a unui tip întreg este declarată după cum urmează:

În acest caz, de fapt, Java știe să tipărească tipul variabilei i și fără int. Ar fi suficient să scrieți:

  • nevoia de a specifica în mod explicit tipurile (micro-problemă)

Cross-platform

Pentru ca aplicația scrisă de dvs. să ruleze pe diferite platforme (Linux, Windows, Android), trebuie să fie convertită (compilată) compatibilă cu această platformă în instrucțiunile procesorului.

Java declară că acest lucru nu este necesar pentru programele sale. Datorită rezultatelor obținute?

Codul scris în Java nu este compilat într-o instrucțiune de procesor (cum ar fi cele mai multe limbi compilate), ci într-un octet special. Acest bytecode este rulat pe o mașină Java - un program special care poate converti bytecodes în instrucțiuni de procesor.

Astfel, codul nu depinde de platformă, ci de mașina Java. Instalând echipamentul Java corespunzător pe fiecare platformă, codul nostru va funcționa în mod egal pe fiecare dintre ele.

  • programele pot funcționa pe diferite sisteme
  • performanța suferă (ușor)

Colector de gunoi

Memorie. Nu este cauciuc. În procesul programului, obiectele sunt create, aglomerând memoria. Pe umerii programatorului, sarcina este de a păstra un ochi pe aceste obiecte, iar atunci când nu sunt necesare - ștergeți-le. Sarcina nu este simplă. Dacă s-a întâmplat ceva - se generează o scurgere de memorie, iar aplicația este inevitabilă (este o chestiune de timp) să se oprească cu eroarea de a epuiza toată memoria disponibilă.

În trecere, asamblorul rezolvă o altă problemă - fragmentarea memoriei. Dacă în concluzie problema este următoarea: există o memorie pentru 10 celule, 5 sunt ocupate și 5 sunt libere. Vreți să scrieți un întreg obiect în 5 celule în memorie - dar nu puteți face acest lucru. pentru că Celulele libere nu sunt situate într-un rând, dar trei la început și două la sfârșit.

  • Nu este nevoie să monitorizați obiectele și să luați o decizie pentru a șterge memoria
  • nici o problemă de fragmentare a memoriei

Bună ziua







Articole similare

Trimiteți-le prietenilor: