ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 48
Abonament PDF

Hiperspații în dezvoltarea software

Gelu Vac
Software Engineering Manager @ Crossover



PROGRAMARE


Există peste 700 de limbaje de programare și doar aproximativ 10 paradigme de dezvoltare software. Cum alegem la nivel de limbaj soluția de implementare pentru un proiect nou? Ce criteriu de evaluare folosim pentru a decide practic soarta noului proiect?

Ce sunt de fapt cele peste 700 de limbaje de programare? Or fi simple re-implementări ale aceluiași principiu cu mici diferențe sintactice? Cu siguranță, nu. Iar răspunsul este exact în spațiul paradigmelor de dezvoltare software. Respectiv în faptul că paradigmele de dezvoltare software nu se află într-o relație antagonică între ele, ci sunt ortogonale.

Câteva paradigme de dezvoltare software

Vorbim despre zone majore de concentrare din punctul de vedere al simbiotului CE avem de rezolvat (obiectul proiectului) și CUM poate fi rezolvat (reacția limbajului la o problemă concretă).

Paradigma programării imperative

În cazul acestei paradigme, fluxul de control este explicit: orice comandă arată pas cu pas cum are loc calculația și fiecare pas afectează starea generală a procesului de calculație.

Paradigma programării funcționale

Se bazează pe teoria funcțiilor matematice, mai exact pe calculații lambda. În această paradigmă fluxul de control este exprimat mai degrabă prin combinarea apelurilor de funcții decât prin atribuirea de valori variabilelor de lucru. Potențialul acestei paradigme vine din transmiterea funcțiilor în funcții (și returnarea funcțiilor din funcții).

Paradigma logic-declarativă

În această paradigmă, programatorul declară relațiile dintre date ca fapte sau reguli. De exemplu, faptele pot fi informațiile despre cine este supraclasa cui, iar regula poate fi o regulă logică, care să ateste că clasa A este bunicul clasei B, dacă A este părintele unei clase intermediare care este părintele clasei B.

Contrar altor paradigme de programare, nu vom construi soluția în paradigma de programare logică. Nu vom scrie funcții și nici nu vom da ordine imperativ. Pur și simplu vom descrie reguli care să definească relații dintre date și să solicite datele care satisfac regulile.

Paradigma programării orientată obiect

Această paradigmă este probabil cea mai des întâlnită în mediile comerciale. Separarea datelor și a acțiunii asupra datelor se pierde și se regăsește în această paradigmă. Este desigur o unificare artificială, dar utilă.

Un obiect are niște date interne și un set de funcții, numite metode. Este posibilă crearea mai multor replici (instante) ale unui obiect, după caz. Fiecare dintre aceste instante are propriul spațiu de date, unde obiectul își păstrează conținutul de informații private. Unele funcții ale obiectului pot fi apelate din alte părți ale programului care nu aparțin definiției obiectului. Mediul exterior nu poate accesa direct spațiul datelor, fiind privat, în schimb, le poate interoga prin apelul unei funcții care aparține obiectului. O astfel de funcție servește drept interfață, iar apelarea ei se numește transfer de mesaje.

Suplimentar acestui concept de ascundere a datelor, paradigma OOP presupune și alte idei, cum ar fi moștenirea, respectiv un programator poate întemeia definiția unui obiect pe unul deja definit. Caz în care, noul obiect moștenește toate definițiile obiectului existent și să le extindă sau să adauge altele noi.

Toate aceste caracteristici ajută la reprezentarea unor probleme reale cu mai multă ușurință și să generăm bucăți reutilizabile de cod, ameliorând mentenabilitatea volumelor mari de cod la care au participat zeci sau sute de programatori.

Paradigma programării concurente

Programarea concurentă este o paradigmă care intenționează să rezolve o problemă prin angajarea concurentă a mai multor procesoare. Fiecare procesor va acționa independent asupra task-ului atribuit și va rezolva o parte a problemei, iar ulterior, soluțiile parțiale ale fiecărui procesor sunt combinate pentru a contura soluția finală.

Punctul central al acestei paradigme este de a gestiona fluxul corect al controlului precum și datele spre și dinspre aceste bucăți de cod care rulează independent.

Paradigma programării bazată pe evenimente

Din perspectiva acestei paradigme, universul programării constă în evenimente și acțiuni legate de aceste evenimente. Când apare un eveniment, acțiunea legată de el este acționată automat. Această acțiune poate efectua unele calculații, dar și să acționeze alte evenimente. Rolul unui programator este să creeze un design al acestui mecanism de reacție de ceasornic în lanț și să implementeze acțiunile ca bucăți unitare de program (funcții).

O astfel de arhitectură trebuie să servească tuturor tipurilor de evenimente care pot să apară, să evite deadlock-urile și să administreze orice eveniment în timp ce se desfășoară o altă acțiune.

Această paradigmă se utilizează extensiv în aplicațiile cu GUI generos.

Definirea unui hiperspațiu

Orice spațiu se definește printr-un set de axe. Axele unui hiperspațiu de programare îl reprezintă paradigmele de programare. Nu este ușor, dar cu puțin efort ni-l putem imagina. În interiorul lui, putem reprezenta sub formă de nori orice limbaje de programare, în funcție de cât de mult suportă un anumit limbaj o anumită paradigmă. Respectiv, norul va fi localizat mai aproape sau mai departe (sau deloc) pe axa reprezentată de acea paradigmă.

Pentru un exemplu simplu, putem alege doar trei paradigme, și deci un spațiu tridimensional, în care să evaluăm trei limbaje low-level. Forma norilor, mai alungită sau mai lățită nu este întâmplătoare, ci urmărește desfășurarea ponderii limbajului între axele hiperspațiului.

Mai mult, vizualizăm hiperspațiul ca nori și nu ca puncte, deoarece:

  1. vorbim de concepte fuzzy care nu pot fi cuantificate printr-un singur scalar. Pur și simplu, nu este rezonabil să spui că C este 81% funcțional (și nu 80% sau 82%).

  2. Există un factor suplimentar care provine de la programator prin stilul propriu de codare. Unele persoane pun accent mai mare pe utilizarea funcțiilor, iar alte persoane sunt mai interesate de supralicitarea calculațiilor produsă prin apelarea funcțiilor și încearcă să fie mai imperativă.

Deci amprenta personală a programatorului se circumscrie în interiorul norului, dar gravitează dinamic.

O întrebare decentă este dacă există vreun limbaj de programare care să ,,tangenteze" toate paradigmele? respectiv există vreun nor care să aibă valori ridicate pe toate axele din hiperspațiu? Iar răspunsul este în labirintul minotaurului, respectiv cât de mult acceptăm ideea creaturilor supra-realiste.

Adevărul este că realizarea unui super-limbaj s-ar bloca pur și simplu într-un conflict de cerințe, pe care chiar dacă le-ar depăși, n-ar fi suficient de versatil, rapid, portabil, etc. . Această realitate este motivul pentru care limbajele actuale de programare acoperă două, maxim trei paradigme.

Cum să alegem un limbaj de programare pentru o implementare?

Toate paradigmele, toate limbajele de programare și chiar toate procesoarele sunt Turing-Echivalente. Adică două calculatoare P si Q sunt turing-echivalente dacă P poate simula Q și Q poate simula P.

Mai explicit: un om ajutat de o lopată și un buldozer sunt echivalenți cât timp reperul de evaluare este mutarea unui volum de pământ. Cheia apare, însă, în ceea ce numim "eficiență" și "ușurință". Dar turing-echivalența nu menționează aceste concepte, ci la potențialul de îndeplinire a misiunii.

Contează, deci, să alegem un limbaj bazat pe considerente de eficiență și ușurință. Practic, luăm zilnic decizii bazându-ne pe aceste considerente.

Există totuși, mai mulți factori în alegerea paradigmelor limbajelor de programare:

A. Domeniul și natura tehnică a problemei (obiectiv)

B. Cultura producătorului de software (subiectiv)

C. Constrângeri impuse de circumstanțe:

D. Moda. Ce se poartă. Vrând nevrând, trendul curent ne influențează alegerea limbajului de programare din mai multe motive:

Bibliografie

  1. Milena Vujosevic-Janicic si Dusan Tosic, "THE ROLE OF PROGRAMMING PARADIGMS IN THE FIRST PROGRAMMING COURSES", THE TEACHING OF MATHEMATICS, 2008, Vol. XI, 2, pp. 63-83
  2. Anil Ananthaswamy, "Beyond space and time: 10D - String country", New Scientist, 26 August 2009
  3. Stephen H. Kaisler, "Software paradigms", Wiley-Interscience, 2005
  4. Gokturk Ucoluk si Sinan Kalkan, "Introduction to programming concepts with use cases in Python", Springer, 2012

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects