Dr. Sabin Buraga profs.info.uaic.ro/~busaco Dezvoltarea aplicațiilor Web la nivel de client programare W

Mărimea: px
Porniți afișarea la pagina:

Download "Dr. Sabin Buraga profs.info.uaic.ro/~busaco Dezvoltarea aplicațiilor Web la nivel de client programare W"

Transcriere

1 Dr. Sabin Buraga profs.info.uaic.ro/~busaco Dezvoltarea aplicațiilor Web la nivel de client programare Web limbajul JavaScript aspecte moderne: ES6 et al.

2 A programming language is low level when its programs require attention to the irrelevant. Alan J. Perlis

3 Care este prezentul și viitorul limbajului JavaScript?

4 ECMAScript 2015 (ES6) definirea de clase perspectiva paradigmei obiectuale parametri cu valori implicite și parametri multipli machete pentru șiruri de caractere (template literals) declararea succintă a funcțiilor anonime (arrow functions) iteratori și generatori notificări privind rezultatul oferit de o funcție (promises) noi tipuri de date e.g., Set, Map, Symbol, Proxy modularizarea codului: module + importuri

5 lista facilităților + exemplificări: es6-features.org ponyfoo.com/articles/es6

6 Definirea de clase (perspectiva paradigmei obiectuale) simple sugar over the prototype-based OO pattern ponyfoo.com/articles/es6-classes-in-depth

7 const DIST = 7, MAXPOWER = 33; class Robot { constructor (distance = 0) { this.power = 0; this.distance = distance; move () { if (this.power < 1) { throw new RangeError ('N-am energie'); this.power--; this.distance += DIST; addpower () { if (this.power >= MAXPOWER) { throw new RangeError ('Bateria e plină'); this.power++;

8 const DIST = 7, MAXPOWER = 33; class Robot { constructor (distance = 0) { this.power = 0; this.distance = distance; move () { if (this.power < 1) { throw new RangeError ('N-am energie'); this.power--; this.distance += DIST; addpower () { if (this.power >= MAXPOWER) { throw new RangeError ('Bateria e plină'); this.power++; în ES6 se pot declara parametri cu valori implicite un robot poate fi mutat, parcurgând o distanță prestabilită și consumând o unitate energică suplimentar, poate fi alimentat cu energie

9 const DIST = 7, MAXPOWER = 33; class Robot { constructor (distance = 0) { this.power = 0; this.distance = distance; move () { if (this.power < 1) { throw new RangeError ('N-am energie'); this.power--; this.distance += DIST; addpower () { if (this.power >= MAXPOWER) { throw new RangeError ('Bateria e plină'); this.power++; // instanțiem un robot // distanța ia valoarea implicită let robot = new Robot (); console.log (robot.distance); try { robot.addpower (); robot.move (); robot.move (); catch (e) { console.error (e.message); finally { console.log ('M-am deplasat cu ' + robot.distance + ' metri, iar energia actuală este ' + robot.power);

10 const DIST = 7, MAXPOWER = 33; class Robot { constructor (distance = 0) { this.power = 0; this.distance = distance; move () { if (this.power < 1) { throw new RangeError ('N-am energie'); this.power--; this.distance += DIST; addpower () { if (this.power >= MAXPOWER) { throw new RangeError ('Bateria e plină'); this.power++; // instanțiem un robot // distanța ia valoarea implicită let robot = new Robot (); console.log (robot.distance); try { robot.addpower (); robot.move (); robot.move (); catch (e) { console.error (e.message); finally { console.log ('M-am deplasat cu ' + robot.distance + ' metri, iar energia actuală este ' + robot.power);

11 class R2D2 extends Robot { constructor (distance) { super (distance * 2); move () { super.move (); this.power++; // R2D2 nu consumă energie ;) a se vedea arhiva exemplelor mai sunt permise: extinderi de clasă via extends acces cu super la membrii din clasa de bază metode de tip get și set metode statice specificate cu prefixul static (similar C++)

12 // instanțiem robotul din clasa R2D2 let r2d2 = new R2D2 (15); try { r2d2.addpower (); // inițial, R2D2 trebuie alimentat cu energie r2d2.move (); catch (e) { console.error (e.message); finally { console.log ('Sunt R2D2, m-am deplasat cu ' + r2d2.distance + ' metri, iar energia curentă este ' + r2d2.power); de ce această valoare?

13 Noi maniere de a declara variabile const valori constante vizibile la nivel de bloc

14 Noi maniere de a declara variabile let alternativă la var, cu vizibilitate la nivel de bloc (mărginirea domeniului de vizibilitate scope) ponyfoo.com/articles/es6-let-const-and-temporal-dead-zone-in-depth

15 function TestareVar () { var x = 33; if (true) { // aceeași variabilă var x = 74; console.log (x); // 74 console.log (x); // 74 function TestareLet () { let x = 33; if (true) { // variabilă diferită! let x = 74; console.log (x); // 74 console.log (x); // 33 developer.mozilla.org/en/docs/web/javascript/reference/statements/let

16 verificarea suportului oferit de navigatoarele Web: instrumentul Can I Use caniuse.com

17 Parametrii unei funcții pot fi multipli (spread/rest parameters) const DELIM = '\u2605\u2a3c'; // caractere Unicode function concatenează (...cuvinte) { return cuvinte.join (DELIM); console.log (concatenează ('ES6', 'e', 'super!')); // "ES6 e super!" ponyfoo.com/articles/es6-spread-and-butter-in-depth

18

19 Destructurare în ES6 (destructuring) binds properties to as many variables as you need and it works with both arrays and objects ponyfoo.com/articles/es6-destructuring-in-depth

20 destructurare pentru date de tip Array // selectarea elementelor dorite dintr-o listă (tablou) let [ primul,, ultimul ] = [ 'Ioana', 'Cezar', Date.now() ]; console.log (primul); // "Ioana" console.log (ultimul); // data curentă în secunde

21 destructurare în cazul obiectelor // oferă ca obiect coordonatele geografice pentru Iași function furnizeazăcoordonate () { return { lat: , long: 27.6 ; var { lat, long = furnizeazăcoordonate (); console.log (lat);

22 destructurare în cazul obiectelor (aici, parametri ai funcțiilor) rularea programului cu instrumentul interactiv JS Bin // furnizează un număr natural generat aleatoriu dintr-un anumit interval function genaleator ({ min = 1, max = 300 = { ) { return Math.floor (Math.random () * (max - min)) + min; for (let it of [1, 2, 3, 4]) { // 4 numere generate aleatoriu console.log (genaleator ());

23 Machete privind substituția de valorile de bază (template literals) machetă = orice șir de caractere delimitat de simbolul ` (inclusiv specificat pe mai multe linii de text multiline) o machetă poate include expresii JavaScript specificate cu ${ ce vor fi înlocuite cu valoarea evaluată

24 var articol = { // obiect JS oferind date despre un articol titlu: 'Machete ES6', subiect: 'facilități privind substituția de valori', slogan: 'Generare HTML cu JS', termeni: [ 'ES6', 'JavaScript', 'HTML5' ] ; var { titlu, subiect, slogan, termeni = articol; // destructurare var html = `<article> <header><h1>${titlu</h1></header> <section> <h2>articol despre ${subiect</h2> <p>${slogan</p> </section> <footer class='subsol'> <ul>${termeni.map (termen => `<li>${termen</li>`).join ('\n\t\t\t')</ul> </footer> </article>`; console.log (html); fiecărui element din tabloul termeni îi corespunde o machetă a cărei valoare va fi un marcaj HTML

25 alte detalii sunt furnizate de ponyfoo.com/articles/es6-template-strings-in-depth es6-features.org/#stringinterpolation

26 Arrow functions declarare succintă a unei funcții anonime parametri => valoareoferită nu posedă propriile valori pentru this, arguments, super ponyfoo.com/articles/es6-arrow-functions-in-depth developer.mozilla.org/web/javascript/reference/functions/arrow_functions

27 // funcție anonimă cu un singur argument de intrare // se întoarce valoarea unei expresii JS console.log ( [2, 3, 5].map (număr => număr * 7) ); // [14, 21, 35] // în JavaScript clasic (ES5): console.log ( [2, 3, 5].map (function (număr) { return număr * 7; ) );

28 // definirea unei funcții recursive în ES6 aici, factorialul let factorial = (număr) => { return număr === 0? 1 : număr * factorial (număr - 1); ; console.log ( factorial (5) ); // 120

29 var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; // asocieri între valori și funcții // aici, calculul pătratului fiecărei valori a elementelor din tablou var pătrate = numere.map (val => Math.pow (val, 2));

30 var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; // reducerea unui tip de date structurat la o valoare scalară // aici, suma tuturor valorilor: 311 var suma = numere.reduce ((a, b) => a + b);

31 var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; // filtrarea valorilor, obținând un sub-tablou // aici, doar numerele impare: [1, 7, 9, 85, 51, 7, 15] var impare = numere.filter (val => val % 2 === 1);

32 adaptare după github.com/30-seconds/30-seconds-of-code var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; const MAX = 99; /* întoarce true dacă predicatul func are ca rezultat true pentru orice element al colecției de date cuantificatorul universal oricare (all ) */ const toate = (tablou, func = Boolean) => tablou.every (func); // ce rezultă executând liniile de cod următoare? toate (numere, număr => număr >= 18 && număr < 65); toate (numere, număr => Math.sqrt (număr) <= MAX);

33

34 var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; /* întoarce true dacă predicatul func are ca rezultat true pentru măcar un element al colecției de date cuantificatorul existențial */ const există = (tablou, func = Boolean) => tablou.some (func); Cum se specifică în ES6 expresia care verifică dacă există măcar o vârstă de adult printre valorile tabloului numere?

35

36 // convertirea unui număr într-un tablou de cifre const digitizare = număr => [...`${număr`].map (i => parseint(i)); console.log ( digitizare (Math.LOG10E) );

37 // convertirea unui număr într-un tablou de cifre const digitizare = număr => [...`${număr`].map (i => parseint(i)); console.log ( digitizare (Math.LOG10E) );???

38 adaptare după github.com/30-seconds/30-seconds-of-code // trunchierea unui șir de caractere const MIN = 3; const truncșir = (șir, număr) => // dacă lungimea șirului e mai mare decât // numărul de caractere dorit șir.length > număr? // înlocuim caracterele în surplus cu șirul '...' șir.slice (0, număr > MIN? număr - MIN : număr) + '...' : șir;

39

40

41 Iteratori iterarea valorilor se poate realiza asupra oricărui obiect generarea de secvențe de valori (finite ori infinite) ce pot fi procesate via construcția for of ponyfoo.com/articles/es6-iterators-in-depth

42 // Recurgerea la iteratori pentru a genera secvențe infinite de valori const VAL = 7, MAX = 69; let secvmult = { // generează o secvență de nr. multiplicate cu o valoare [Symbol.iterator]() { let curent = 0; // contor disponibil doar în interiorul iteratorului return { next () { // se expune metoda next () pentru a obține următoarea valoare curent++; // metoda next () va întoarce obligatoriu 2 valori return { done: false, // 'true' semnalează că secvența se termină value: curent * VAL // desemnează elementul curent al secvenței ; ; for (let numar of secvmult) { if (numar > MAX) break; // secvența fiind infinită, trebuie să folosim 'break' console.log (numar);

43 rezultat al execuției programului JavaScript de experimentat rularea cu JS Bin

44 Iteratori remarcă: un singur element al secvenței poate fi accesat la un moment dat (lasy in nature)

45 Generatori generator = tip special de iterator ce returnează g obiecte de tip generator care ulterior pot fi iterate cu Array.from (g), [ g] sau for valoare of g ponyfoo.com/articles/es6-generators-in-depth es6-features.org/#generatorfunctioniteratorprotocol

46 Generatori oprirea temporară și apoi continuarea execuției unui generator se realizează via yield developer.mozilla.org/web/javascript/reference/operators/yield

47 // declararea unui generator de identificatori numerici function* idmaker () { var index = 0; while (index < 3) yield index++; const gen = idmaker (); function* declară un generator apelul idmaker () nu execută corpul funcției, ci creează un obiect generator menit a controla execuția instrucțiunilor din corp // obținerea unui identificator via generatorul declarat console.log (gen.next ().value); // 0 console.log (gen.next ().value); // 1 console.log (gen.next ().value); // 2 console.log (gen.next ().value); // undefined // iterarea valorilor de identificatori generați for (let id of idmaker ()) { console.log (id); vezi exemplul din arhivă

48 // generarea secvenței numerelor lui Fibonacci let fib = function* (numere) { let prec = 0, curent = 1; while (numere-- > 0) { [ prec, curent ] = [ curent, prec + curent ]; // destructurare yield curent; // primele 10 numere console.log ([...fib (10) ]); // [1, 2, 3, 5, 8, 13, 21, 34, 55, 89] // al doilea din secvență, apoi restul de la al patrulea încolo let [, n2,,...restul ] = fib (10); console.log (n2, restul); // 2 și [5, 8, 13, 21, 34, 55, 89] adaptare după es6-features.org/#generatormatching

49 pentru aspecte avansate, a se studia: exploringjs.com/es6/ch_generators.html

50 Promises promisiune (promise) rezultat ce ar putea fi oferit în urma execuției unei operații asincrone

51 Promises promisiune (promise) rezultat ce ar putea fi oferit în urma execuției unei operații asincrone represents an operation that has not completed yet, but is expected in the future developer.mozilla.org/web/javascript/reference/global_objects/promise exploringjs.com/es6/ch_promises.html

52 Promises fiecare obiect de tip Promise se poate afla în una dintre stările: pending stare inițială, operația nu s-a terminat sau a fost anulată

53 Promises fiecare obiect de tip Promise se poate afla în una dintre stările: fulfilled operația s-a terminat cu succes, oferind un rezultat

54 Promises fiecare obiect de tip Promise se poate afla în una dintre stările: rejected operația a eșuat, oferindu-se un motiv (eroarea survenită)

55 Promises fiecare obiect de tip Promise se poate afla în una dintre stările: settled operația a avut loc (cu succes sau cu eroare)

56 // implementarea unui obiect Promise var promise = new Promise (function (resolve, reject) { // realizarea unor operații (eventual, în mod asincron) // apoi, în funcție de ceea ce s-a întâmplat if (/* totul e în regulă */) { resolve ("A mers!"); // poate fi prelucrat rezultatul cu then () else { reject (Error ("S-a stricat")); // eroarea poate fi tratată via catch () ); specificația pentru implementarea standardizată: promisesaplus.com biblioteci JS: promisesaplus.com/implementations

57 // implementarea unui obiect Promise var promise = new Promise (function (resolve, reject) { // realizarea unor operații (eventual, în mod asincron) // apoi, în funcție de ceea ce s-a întâmplat if (/* totul e în regulă */) { resolve ("A mers!"); // poate fi prelucrat rezultatul cu then () else { reject (Error ("S-a stricat")); // eroarea poate fi tratată via catch () ); // utilizarea ulterioară promise.then (function(result) { console.log (result); // "A mers!", function(err) { console.log (err); // Error: "S-a stricat" );

58 settled acțiuni asincrone (async actions) pending.then (onfullfilment) pending Promise.then (onrejection).catch (onrejection) Promise.then ().catch () tratarea erorilor (error handling) metodele then () și catch () pot fi înlănțuite

59 settled acțiuni asincrone (async actions) pending.then (onfullfilment) pending Promise.then (onrejection).catch (onrejection) Promise.then ().catch () tratarea erorilor (error handling) metodele then () și catch () pot fi înlănțuite un tutorial, oferind exemple practice: developers.google.com/web/fundamentals/primers/promises a se studia și github.com/wbinnssmith/awesome-promises

60

61 Noi tipuri de date ES6 Set Map WeakSet WeakMap Symbol Proxy

62 Noi tipuri de date ES6: Set structură de date iterabilă implementând conceptul de mulțime (un element apare o singură dată) proprietate: size nu se utilizează length metode: add() delete() clear() entries() has() foreach() keys() values() developer.mozilla.org/web/javascript/reference/global_objects/set

63 Noi tipuri de date ES6: Map structură de date iterabilă de tip asociere cheie valoare (cheile și valorile pot avea orice tip, inclusiv funcții) proprietate: size metode: set() get() delete() clear() entries() has() foreach() keys() values() developer.mozilla.org/web/javascript/reference/global_objects/map

64 Noi tipuri de date ES6: WeakSet similar cu Set, dar reprezintă o mulțime de obiecte și nu de valori arbitrare având diverse tipuri de date în contrast cu Set, obiectele de tip WeakSet nu pot fi enumerate, iar referințele la obiecte sunt weak dacă nu există referințe la una dintre cheile sale, obiectul este eliberat din memorie (garbage collection)

65 Noi tipuri de date ES6: WeakMap similar cu WeakSet, dar fiecare cheie trebuie să fie obiect ponyfoo.com/articles/es6-weakmaps-sets-and-weaksets-in-depth

66 Noi tipuri de date ES6: Symbol un simbol este un tip de date imutabil ce poate fi folosit ca identificator unic pentru proprietățile obiectelor a symbol never clashes with any other property key (symbol or string) exploringjs.com/es6/ch_symbols.html

67 const ST_VESEL = Symbol(' '); const ST_TRIST = Symbol(' '); const ST_NEUTRU = Symbol(' '); function oferăstarecomplementară (stare) { switch (stare) { case ST_VESEL: return ST_TRIST; case ST_TRIST: return ST_VESEL; default: throw new Error ('Stare de spirit necunoscută'); try { console.log (oferăstarecomplementară (ST_TRIST)); // conversia la șir de caractere trebuie realizată explicit console.log (oferăstarecomplementară (ST_VESEL).toString ()); // apelăm funcția având ca argument un simbol nedorit console.log (oferăstarecomplementară (ST_NEUTRU)); catch (e) { console.log (e.message);

68 Noi tipuri de date ES6: Proxy se permite interceptarea și modificarea operațiilor realizate de obiecte e.g., proprietăți de tip getter redefinirea semanticii unor construcții ale limbajului de programare (intercession) aspect al meta-programării exploringjs.com/es6/ch_proxies.html

69 suportul vizând noile tipuri de date ES6 oferit de navigatoarele Web actuale (FF Firefox, CH Chrome, OP Opera, SF Safari) kangax.github.io/compat-table/es6/

70 (în loc de) pauză

71 Extinderea unor tipuri existente Number exprimarea de valori octale și binare const N404octal = 0o624; const N404binar = 0b ; console.log (N404octal == N404binar); // true

72 Extinderea unor tipuri existente RegExp noi operatori + opțiuni exploringjs.com/es6/ch_regexp.html

73 Extinderea unor tipuri existente String suport mai bun pentru Unicode inclusiv vizând internaționalizarea exploringjs.com/es6/ch_unicode.html es6-features.org/#unicodestringregexpliteral

74 Tablouri respectând un anumit tip de date typed arrays utile pentru a manipula în principal date binare: întregi (cu/fără semn) cu stocare pe 8, 16, 32 de biți Int8Array Uint8Array Int16Array Int32Array etc. numere reale reprezentate pe 32 sau 64 de biți Float32Array Float64Array exploringjs.com/es6/ch_typed-arrays.html

75 // definim o structură de date pe 24 de octeți, similară celei din limbajul C: // struct Animal { unsigned long id; char nume[16]; float mărime class Animal { constructor (mem = new ArrayBuffer (24)) { // alocăm memoria necesară this.mem = mem; ; // gestionarea memoriei corespunzătoare datelor de stocat (un buffer) set mem (date) { // stocarea datelor în zona de memorie alocată this._mem = date; // intern, vor fi folosite proprietăți private this._id = new Uint32Array (this._mem, 0, 1); this._nume = new Uint8Array (this._mem, 4, 16); this._mărime = new Float32Array (this._mem, 20, 1); get mem () { // obținerea datelor stocate return this._mem; adaptare după es6-features.org/#typedarrays

76 // metode setter/getter pentru fiecare membru în parte set id (v) { this._id[0] = v; get id () { return this._id[0]; set nume (v) { this._nume = v; get nume () { return this._nume; set mărime (v) { this._mărime[0] = v; get mărime () { return this._mărime[0]; let tux = new Animal (); tux.id = 69; tux.nume = "Tux"; tux.mărime = 15.74; console.log (`Obiectul ${tux.nume are identificatorul ${tux.id și mărimea ${tux.marime.`); adaptare după es6-features.org/#typedarrays

77

78 Module scop: modularizarea + reutilizarea codului-sursă spre deosebire de JavaScript clasic, unde modularizarea se baza pe biblioteci externe (CommonJS sau RequireJS care adoptă AMD Asynchronous Module Definition), în ES6 există suport nativ exploringjs.com/es6/ch_modules.html

79 // --json.js-- function preiajson (url, procdate) { // preia de la un URL date JSON let xhr = new XMLHttpRequest (); // procesate cu funcția procdate xhr.onload = function () { procdate (this.responsetext) ; xhr.open ("GET", url, true); xhr.send (); export function oferăconținut (url, procdate) { preiajson (url, date => procdate (JSON.parse (date))); specificarea unui modul stocat într-un fișier conform politicii one module per file & one file per module ce oferă (exportă) funcționalități

80 // --json.js-- function preiajson (url, procdate) { let xhr = new XMLHttpRequest (); xhr.onload = function () { procdate (this.responsetext) ; xhr.open ("GET", url, true); xhr.send (); // --main.js-- (utilizarea modulului) import { oferăconținut from "json.js"; oferăconținut (" date => { procesează (date); ); export function oferăconținut (url, procdate) { preiajson (url, date => procdate (JSON.parse (date))); aici, importul este identificat prin nume (named import)

81 Remarci: importul modulelor se poate realiza oriunde în program (imports are hoisted) structura modulelor e statică nu se pot realiza importuri/exporturi condiționale se oferă suport pentru dependențe ciclice

82 suport pentru încărcarea modulelor JS cu <script type="module"> </script> tutorial: developers.google.com/web/fundamentals/primers/modules

83 Instrumente ES6 în principal, convertire ES6 ES5 Babel babeljs.io Traceur github.com/google/traceur-compiler altele la github.com/addyosmani/es6-tools

84 ECMAScript 2016 (ES7) specificație standardizată ediția 7 (2016)

85 ECMAScript 2016 (ES7) noutate: operatorul ** (exponent) let valoarelacub = val => val ** 3; // Math.pow (val, 3);

86 // prelucrări statistice var numere = [1, 7, 50, 74, 9, 85, 51, 12, 7, 15]; // funcție ce calculează deviația standard const devstd = (valori, pop = false) => { const media = valori.reduce ((tablou, val) => tablou + val, 0) / valori.length; return Math.sqrt ( valori.reduce ((acurat, val) => acurat.concat ((val - media) ** 2), []).reduce ((acurat, val) => acurat + val, 0) / (valori.length - (pop? 0 : 1)) ); ; // afișarea deviației standard console.log (devstd (numere) ); // eșantion (sample) console.log (devstd (numere, true) ); // populație (population)

87 pentru amănunte, a se studia 30 Second of Code github.com/30-seconds/30-seconds-of-code

88 ECMAScript 2016 (ES7) noutate: verificarea faptului că un element aparține unui tablou metoda Array.includes ()

89 ECMAScript 2017 (ES8) specificație standardizată ediția 8 (iunie 2017)

90 ECMAScript 2017 (ES8) noutate: funcții asincrone (async functions) definirea unei funcții asincrone conduce la obținerea unui obiect de tip AsyncFunction developer.mozilla.org/web/javascript/reference/statements/async_function

91 Funcții asincrone (async functions) la apelare, o funcție asincronă oferă un obiect de tip Promise acesta e creat la execuția funcției asincrone

92 Funcții asincrone (async functions) la apelare, o funcție asincronă oferă un obiect de tip Promise acesta e creat la execuția funcției asincrone este executat corpul funcției execuția poate fi terminată permanent via return (succes) ori throw (caz de eroare)

93 Funcții asincrone (async functions) la apelare, o funcție asincronă oferă un obiect de tip Promise acesta e creat la execuția funcției asincrone este executat corpul funcției execuția poate fi terminată permanent via return (succes) ori throw (caz de eroare) sau poate fi temporar oprită via await (uzual, execuția va fi reluată ulterior)

94 Funcții asincrone (async functions) programul poate fi notificat atunci când este disponibil rezultatul unei funcții obiectul Promise e în starea settled adică operația a avut loc (cu succes sau cu eroare): se recurge la metodele then () și, eventual, catch ()

95 Funcții asincrone (async functions) programul poate fi notificat atunci când este disponibil rezultatul unei funcții obiectul Promise e în starea settled adică operația a avut loc (cu succes sau cu eroare): se recurge la metodele then () și, eventual, catch () această notificare are loc în mod asincron exploringjs.com/es2016-es2017/ch_async-functions.html

96 const MAXITER = 7; async function funcasinc1 () { for (let i = 1; i <= MAXITER; i++) { console.log (`Asincron 1: ${i`); ; return "Java"; async function funcasinc2 () { for (let i = 1; i <= MAXITER; i++) { console.log (`Asincron 2: ${i`); ; return "Script"; async function funcasincp () { // se așteaptă execuția ambelor funcții asincrone const [rez1, rez2] = await Promise.all ([ funcasinc1 (), funcasinc2 (), ]); return rez1 + rez2; // deoarece o funcție asincronă întoarce un obiect Promise, // putem folosi metoda then (); // pentru a trata erorile se va recurge la catch () funcasincp().then (r => console.log (`Rezultat: ${r`)); console.log ("Program principal");

97 const MAXITER = 7; async function funcasinc1 () { for (let i = 1; i <= MAXITER; i++) { console.log (`Asincron 1: ${i`); ; return "Java"; async function funcasinc2 () { for (let i = 1; i <= MAXITER; i++) { console.log (`Asincron 2: ${i`); ; return "Script"; async function funcasincp () { // se așteaptă execuția ambelor funcții asincrone const [rez1, rez2] = await Promise.all ([ funcasinc1 (), funcasinc2 (), ]); return rez1 + rez2; // deoarece o funcție asincronă întoarce un obiect Promise, // putem folosi metoda then (); // pentru a trata erorile se va recurge la catch () funcasincp().then (r => console.log (`Rezultat: ${r`)); console.log ("Program principal");

98 de aprofundat articolul N. Grozev, Await and Async Explained with Diagrams & Examples (2017): nikgrozev.com/2017/10/01/async-await/

99 ECMAScript 2017 (ES8) noutate: memorie partajată (shared memory) via obiectul SharedArrayBuffer + operații atomice oferite de obiectul global Atomics pentru detalii și exemplificări, a se parcurge exploringjs.com/es2016-es2017/ch_shared-array-buffer.html

100 compararea facilităților oferite în prezent de versiunile ECMAScript 2016 și ECMAScript 2017 kangax.github.io/compat-table/es2016plus/

101 ECMAScript 2018 (ES9) specificație standardizată ediția 9 (2018)

102 ECMAScript 2018 (ES9) noutate: extinderea suportului pentru expresii regulate detalii în Axel Rauschmayer, Exploring ES2018 and ES2019 exploringjs.com/es2018-es2019/

103 ECMAScript 2018 (ES9) noutate: operatorul poate fi folosit și pentru proprietăți ale obiectelor (object spread/rest properties) exploringjs.com/es2018-es2019/ch_rest-spread-properties.html

104 // preluarea proprietăților enumerabile dintr-un obiect let { nume, mărime,...altele = { nume: 'Tux', mărime: 2, oferta: true, disponibil: false ; console.log (altele); console.log (`Jucăria se numește ${nume; oferta: ${altele.oferta`);

105 ECMAScript 2018 (ES9) noutate: operatorul poate fi folosit și pentru proprietăți ale obiectelor (object spread/rest properties) utilizări: clonarea și fuziunea obiectelor const clona = {...obiect ; const fuziune = {...obiect1,...obiect2 ;

106 ECMAScript 2018 (ES9) noutate: interații asincrone (interfețele AsyncIterable și AsyncIterator), generatori asincroni + construcția for-await-of explicații și exemplificări: exploringjs.com/es2018-es2019/ch_asynchronous-iteration.html

107 ECMAScript 2018 (ES9) noutate: metoda finally() pentru un obiect Promise se poate defini o funcție de tip callback al cărei cod va fi întotdeauna executat la terminarea unei promisiuni exploringjs.com/es2018-es2019/ch_promise-prototype-finally.html

108 ECMAScript 2018 (ES9) noutate: metoda finally() pentru un obiect Promise promise.then (rezultat => { ).catch (eroare => { ).finally (() => { );

109 facilități ECMAScript 2018 în navigatoarele Web kangax.github.io/compat-table/es2016plus/

110 Alte resurse disponibile liber: Nicholas C. Zakas, Understanding ECMAScript 6 (2015) leanpub.com/understandinges6/read Ryan Christiani, Let s Learn ES6 (2018) bubblin.io/book/let-s-learn-es6-by-ryan-christiani/ Axel Rauschmayer, Exploring JS: JavaScript books for programmers (2018) exploringjs.com Wolfram Kriesing, ES6 Katas (2016) es6katas.org

111 ECMAScript 2019 (ES10) specificație în lucru (1 noiembrie 2018) tc39.github.io/ecma262/

112 episodul viitor: JavaScript în cadrul browser-ului Web

avansat Dr. Sabin Buraga profs.info.uaic.ro/~busaco/ Tehnologii Web programare Web JavaScript la nivel de server Node.js (aspecte esențiale)

avansat Dr. Sabin Buraga profs.info.uaic.ro/~busaco/ Tehnologii Web programare Web JavaScript la nivel de server Node.js (aspecte esențiale) avansat Tehnologii Web programare Web JavaScript la nivel de server Node.js (aspecte esențiale) Cine a văzut vreodată o bijuterie frumos cizelată de bijutier cu ajutorul ciocanului? Jan Amos Comenius JavaScript

Mai mult

Laborator 3

Laborator 3 Laborator 3 Programare III săptămâna 8-12.10.2018 OBIECTIVE: - Folosirea modificatorilor unei clase (public, abstract, final) - Folosirea modificatorilor de acces în declaraţiile membrilor unei clase Noţiuni:

Mai mult

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011 Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011 I. NOŢIUNI TEORETICE A. Suprascrierea metodelor O clasă derivată

Mai mult

Microsoft Word - Curs 7 - JavaScript.doc

Microsoft Word - Curs 7 - JavaScript.doc Cursul 7 JavaScript - partea a II-a 1. Instrucţiunile trycatch şi throw 1.1. Instrucţiunea trycatch Este utilizată pentru a detecta eventualele erori dintr-o secvenţă de cod Blocul try conţine secvenţa

Mai mult

Top

Top PROGRAMARE ORIENTATĂ PE OBIECTE Tratarea excepțiilor O excepție este o eroare care poate să apară la rularea unui program. Exemple: încercarea de deschidere a unui fișier ce nu există depășirea limitelor

Mai mult

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Programarea calculatoarelor Lect.dr. Adrian Runceanu Curs 3 Elemente introductive ale

Mai mult

tehnologii web

tehnologii web Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Tehnologii Web Lector univ. dr. Adrian Runceanu 1 Curs 7 Limbajul PHP (partea II) 2

Mai mult

Declararea variabilelor

Declararea variabilelor Platforma 3. 1 Instructiuni diverse Declararea variabilelor Tipuri de Date Tipul de dată al unui obiect/variabila specifica tipul informaţiei pe care acel obiect îl poate stoca. Exemplu: numere întregi,

Mai mult

Paradigme de programare

Paradigme de programare Curs 4 Transparență referențială. Legare statică / dinamică. Modelul contextual de evaluare. Transparență referențială Cuprins Efecte laterale Transparență referențială 2 Efecte laterale Efecte laterale

Mai mult

Paradigme de Programare

Paradigme de Programare Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 9 : 1 / 38 Cursul 9 Concluzie Paradigma Funcțională 9 : 2 / 38 Cursul 9:

Mai mult

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa a două funcţii care au acelaşi nume În C++ acest lucru

Mai mult

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java 2 1.1 Interfaţa Iterator...................................... 2 1.2 Interfaţa Collection.................................... 2 1.3

Mai mult

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011 Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011 I. NOŢIUNI TEORETICE A. Instrucţiuni condiţionale 1. Intrucţiunea

Mai mult

proiectarea bazelor de date

proiectarea bazelor de date Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie şi Dezvoltare Durabilă Departamentul de Automatică, Energie, Mediu şi Dezvoltare Durabilă Proiectarea bazelor de date Lect.dr. Adrian

Mai mult

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Limbaje de Programare   Curs 6 – Functii de intrare-iesire Limbaje de Programare Curs 6 Funcţii de intrare-ieşire Dr. Casandra Holotescu Universitatea Politehnica Timişoara Ce discutăm azi... 1 Citire formatată 2 Citirea şirurilor de caractere 3 Citirea unor linii

Mai mult

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc Transmiterea parametrilor unei funcții Parametrii se transmit de la funcţia apelantă la funcţia apelată prin intermediul stivei. La apelul unei funcţii, pe stivă se crează o înregistrare de activare, care

Mai mult

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011 Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011 I. NOŢIUNI TEORETICE A. Ce este un fir de execuţie? Înainte de a defini conceptul de fir

Mai mult

PHP (II)

PHP (II) PHP şi MySQL Bazele de date sunt colecţii de date, aranjate într-o anumită formă Operaţii : - Crearea bazei de date; - Conectarea la baza de date; - Inserarea datelor in baza de date; - Ștergerea datelor

Mai mult

Ingineria Sistemelor de Programare

Ingineria Sistemelor de Programare Ingineria Sistemelor de Programare Agregarea si Mostenirea mihai.hulea@aut.utcluj.ro 2019 Compozitia si agregarea Relatia dintre obiecte raspunde afirmativ la intrebarea are un/are o Exemple: Telefonul

Mai mult

Proiectarea Sistemelor Software Complexe

Proiectarea Sistemelor Software Complexe Proiectarea Sistemelor Software Complexe Curs 4 Arhitecturi de Sistem Software Bazate pe Tehnologii Middleware. Obiecte Distribuite. Rolul unui arhitect software este foarte asemănător cu cel al unui arhitect

Mai mult

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Logică și structuri discrete Limbaje regulate și automate Marius Minea   marius/curs/lsd/ 24 noiembrie 2014 Logică și structuri discrete Limbaje regulate și automate Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 24 noiembrie 2014 Un exemplu: automatul de cafea acțiuni (utilizator): introdu

Mai mult

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIȘA DISCIPLINEI 1.

..MINISTERUL EDUCAŢIEI NAȚIONALE ŞI CERCETARII STIINTIFICE UNIVERSITATEA DE VEST DIN TIMIȘOARA.I CENTRUL DE DEZVOLTARE ACADEMICĂ. FIȘA DISCIPLINEI 1. FIȘA DISCIPLINEI 1. Date despre program 1.1. Instituția de învățământ superior Universitatea de Vest din Timișoara 1.2. Facultatea Matematică și Informatică 1.3. Departamentul Informatică 1.4. Domeniul

Mai mult

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc Introducere în limbajul de programare C - C este un limbaj de programare ale cărui caracteristici sunt economia de expresie, structuri moderne de control al fluxului şi de date, precum şi un set bogat

Mai mult

Introducere în limbajul JavaScript

Introducere în limbajul JavaScript Introducere în limbajul JavaScript (III) HTML DOM (Document Object Model) DOM este un standard W3C (World Wide Web Consortium) care permite programelor și scripturilor accesarea dinamică a documentelor

Mai mult

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012 Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012 EROARE: lipsa iniţializării E o EROARE să folosim o variabilă neiniţializată int sum; for (i=0; i++ < 10; ) sum += a[i];

Mai mult

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode] Detalii de implementare. Declararea variabilelor, transmiterea parametrilor catre subprograme. Declararea variabilelor variabile globale -declarate in afara oricarei functii variabile locale -declarate

Mai mult

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja far Mohammed ibn Musâ al- Khowârizmî în cartea sa intitulată

Mai mult

SUBPROGRAME

SUBPROGRAME SUBPROGRAME Un subprogram este un ansamblu ce poate conţine tipuri de date, variabile şi instrucţiuni destinate unei anumite prelucrări (calcule, citiri, scrieri). Subprogramul poate fi executat doar dacă

Mai mult

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine numărul de operaţii efectuate de către un algoritm care determină

Mai mult

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu modul de implementare al unei aplicaţii de tip client.

Mai mult

PROGRAMARE ORIENTATA PE OBIECTE

PROGRAMARE ORIENTATA PE OBIECTE Curs 2 Principiile Programării Orientate pe Obiecte Programare Orientată pe Obiecte Tehnici de programare Programarea procedurală Modul în care este abordată programarea, din punct de vedere al descompunerii

Mai mult

Slide 1

Slide 1 STRUCTURI DE DATE Fundamente C/C++ EVALUARE SEMESTRU: 4 puncte Testare cunostinte: 1. Calculator (2 puncte) 2. Scris/Oral (2 puncte) 2 EVALUARE EXAMEN: 6 puncte Test cunostinte (pe calculator): 1 punct.

Mai mult

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Microsoft Word _POO_Lab_1_Modificari_v01.htm Laborator POO - 00 (draft) 00-00 / 0//00 00_POO_Lab Modificari_v0.htm POO Laborator Modificarea programelor Java. Studiu de caz: programul Salut.java. Varianta care utilizeaza un argument al programului

Mai mult

CURS

CURS Capitolul Cuvinte-cheie SOAP, XML, REST, ASP.NET, client web, PHP, NuSOAP IH.12.1. Introducere Ce înseamnă serviciile web? Ele înseamnă invocarea la distanță a metodelor, prin web; limbaje și platforme

Mai mult

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace 174 12 Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este aceasta văzută de programatorul în limbaj de nivel înalt.

Mai mult

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4 Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4 Ruby Rails Aparut in 1995 Limbaj de programare Este gratuit si open source Foloseste librarii numite gem -uri Foloseste doar programarea orientata

Mai mult

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Programarea calculatoarelor Lect.dr. Adrian Runceanu Curs 6 Instrucţiunile limbajului

Mai mult

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Logică și structuri discrete Relații. Funcții parțiale Marius Minea   marius/curs/lsd/ 20 octombrie 2014 Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 20 octombrie 2014 Relații în lumea reală și informatică Noțiunea matematică de

Mai mult

Slide 1

Slide 1 1 PROIECTAREA ALGORITMILOR Lect. univ. dr. Adrian Runceanu 1 Curs Alocarea dinamică de memorie în C++ Conţinutul cursului 1. Tipuri de date. Conceptul de pointer 3. Operatori specifici pointerilor 4. Aritmetica

Mai mult

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A

1. Operatii cu matrici 1 Cerinte: Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A 1. Operatii cu matrici 1 Sa se realizeze functii pentru operatii cu matrici patratice (de dimensiune maxima 10x10). Operatiile cerute sunt: A+B (adunare), aa (inmultire cu scalar), A-B scadere), AT (Transpusa),

Mai mult

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Microsoft PowerPoint - Curs_TPI_22_v01.ppt UPB Facultatea ETTI Curs TPI an III RST 2009-2010 Tehnologii de Programare in Internet (TPI / RST) Titulari curs: Mihnea Magheti, Eduard-Cristian Popovici Suport curs: http://discipline.elcom.pub.ro/tpi/

Mai mult

Microsoft Word - Lab1a.doc

Microsoft Word - Lab1a.doc Sisteme de numeraţie şi coduri numerice 1.1. Sisteme de numeraţie 1.2. Conversii generale între sisteme de numeraţie 1.3. Reprezentarea numerelor binare negative 1.4. Coduri numerice 1.5. Aplicaţii In

Mai mult

Object Oriented Programming

Object Oriented Programming UNIVERSITATEA BABEŞ-BOLYAI Facultatea de Matematică şi Informatică Programare orientată obiect Curs 02 Laura Dioşan 2 POO Elemente de bază ale limbajului C++ Referinţe şi pointeri Vectori TAD-uri 3 Tipul

Mai mult

E_d_Informatica_sp_MI_2015_bar_02_LRO

E_d_Informatica_sp_MI_2015_bar_02_LRO Examenul de bacalaureat naţional 2015 Proba E. d) Informatică Varianta 2 Filiera teoretică, profilul real, specializările: matematică-informatică matematică-informatică intensiv informatică Toate subiectele

Mai mult

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiilor (engl. Information Retrieval, IR) constă în găsirea

Mai mult

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor Programare orientată pe obiecte # 10 JAVA Limbajul JAVA. Clasa String 2018 Adrian Runceanu www.runceanu.ro/adrian copyright@www.adrian.runceanu.ro Curs 10 Clasa String in Java 03.12.2018 Curs - Programare

Mai mult

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut să stocați douăzeci de nume de angajați în variabile

Mai mult

Procesarea documentelor XML in Linux

Procesarea documentelor XML in Linux Procesarea documentelor XML in Linux Sabin-Corneliu Buraga Facultatea de Informatica Universitatea A.I.Cuza din Iasi, Romania http://www.infoiasi.ro/~busaco/ Sabin Buraga < busaco@infoiasi.ro > 1 cuprins

Mai mult

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere Scopul acestei lucrări de laborator este de a familiariza

Mai mult

Analiză de flux de date 29 octombrie 2012

Analiză de flux de date 29 octombrie 2012 Analiză de flux de date 29 octombrie 2012 Analiză statică: definiţie O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăţi ale programului sursă. (in principal corectitudinea,

Mai mult

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx SDA (PC2) Curs 9 Liste / Grafuri / Arbori Iulian Năstac Lista dublu înlănțuită Recapitulare Într-o astfel de listă fiecare nod conţine doi pointeri: unul spre nodul următor şi unul spre nodul precedent.

Mai mult

E_d_Informatica_sp_SN_2014_bar_10_LRO

E_d_Informatica_sp_SN_2014_bar_10_LRO Examenul de bacalaureat naţional 2014 Proba E. d) Informatică Varianta 10 Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu. Timpul de lucru efectiv este de 3 ore. În rezolvările cerute,

Mai mult

Subiectul 1

Subiectul 1 Subiectul 1 În fişierul Numere.txt pe prima linie este memorat un număr natural n (n

Mai mult

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de dezvoltare bazată pe un microcontroller ATmega 328P pe 8 biți cu 32kB memorie flash. Placa de dezvoltare conține:

Mai mult

Managementul Resurselor Umane

Managementul Resurselor Umane Universitatea Politehnica București Catedra de Calculatoare Laborator 4 Cereri SQL Autori Conf. Dr. Ing. Alexandru Boicea Ș.L. Dr. Ing. Ciprian-Octavian Truică Cuprins Cereri SQL Cereri simple 10.03.2019

Mai mult

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Curs 3  Permutari cu repetitie. Combinari.  Algoritmi de ordonare si generare Curs 3 Permutări cu repetiţie. Combinări. Algoritmi de ordonare şi generare Octombrie 2015 Cuprins Algoritmi de ordonare şi generare pentru permutări cu repetiţie Reprezentarea binară a submulţimilor Algoritmi

Mai mult

Analiză statică Analiza fluxului de date 23 octombrie 2014

Analiză statică Analiza fluxului de date 23 octombrie 2014 Analiză statică Analiza fluxului de date 23 octombrie 2014 Analiză statică: definiție O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăți ale programului sursă. (in

Mai mult

Slide 1

Slide 1 CURS 4 Structura generală a unui program C Program - ansamblu de instrucţiuni incluse în una sau mai multe funcţii, care specifică operaţiile ce trebuie efectuate asupra unor date pentru a fi prelucrate

Mai mult

Limbaje de Programare Curs 5 – Siruri de caractere

Limbaje de Programare   Curs 5 – Siruri de caractere Limbaje de Programare Curs 5 Şiruri de caractere Dr. Casandra Holotescu Universitatea Politehnica Timişoara Ce discutăm azi... 1 Şiruri de caractere 2 Tipul pointer 3 Funcţii cu şiruri de caractere Şiruri

Mai mult

Microsoft Word - lab4.doc

Microsoft Word - lab4.doc Lucrarea 4 Moştenire şi polimorfism Cuprins Relaţia de moştenire în Java...1 Reguli de vizibilitate în contextul relaţiei de moştenire...2 Constructorii şi moştenirea...4 Operatorul instanceof...4 Redefinirea

Mai mult

Tablouri (continuare)

Tablouri (continuare) Vector Dinamic DYNAMIC ARRAY Observații 1. Un tablou este static: nu pot fi inserate sau şterse celule. 2. Vector - tablou unidimensional 3. Reprezentarea vectorilor este secvenţială, adică elementele

Mai mult

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

LOGICA MATEMATICA SI COMPUTATIONALA  Sem. I, LOGICA MATEMATICĂ ŞI COMPUTAŢIONALĂ Sem. I, 2017-2018 Ioana Leustean FMI, UB Partea III Calculul propoziţional clasic Consistenţă şi satisfiabilitate Teorema de completitudine Algebra Lindenbaum-Tarski

Mai mult

CL2009R0976RO bi_cp 1..1

CL2009R0976RO bi_cp 1..1 2009R0976 RO 31.12.2014 002.001 1 Acest document reprezintă un instrument de documentare, iar instituţiile nu îşi asumă responsabilitatea pentru conţinutul său. B REGULAMENTUL (CE) NR. 976/2009 AL COMISIEI

Mai mult

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici Operatii pe biti Operatorul conditional Operatori Logici

Mai mult

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx Curs SDA (PC2) Curs 4 Structuri de date (continuare) Iulian Năstac 10. Funcţii pentru alocarea dinamică a memoriei (Recapitulare) Alocarea dinamică este caracteristica prin care un program poate obţine

Mai mult

L7

L7 Lucrarea de laborator nr. 7 POINTERI 1. Conţinutul lucrării În lucrare se prezintă tipul pointer, operaţiile permise asupra pointerilor, modul de alocare şi eliberare dinamică a memoriei. 2. Consideraţii

Mai mult

Microsoft Word - Ansamblul software CRONIS

Microsoft Word - Ansamblul software CRONIS Ansamblul software CRONIS este un sistem decizional multiagent pentru generarea, optimizarea şi managementul RRBCN/RNBCN pornind de la un set de date medicale complexe, rezultate din entități medicale

Mai mult

Curs 10

Curs 10 Ingineria Programării Design Patterns Modele de proiectare Curs Ovidiu Gheorghieş, ogh@infoiasi.ro Adriana Gheorghieş, adrianaa@infoiasi.ro Model View Controller Cel mai popular model de proiectare Dezvoltat

Mai mult

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blocurile anonime) care poate primi parametri şi poate

Mai mult

Microsoft Word - O problema cu bits.doc

Microsoft Word - O problema cu bits.doc O problemă cu bits 1 Tiberiu Socaciu Enunţul Pe pagina Proful de Mate de pe Facebook 2 am primit de la un elev de clasa a IX-a următoarea provocare 3 : Vom oferi două soluţii, una folosind manipulări de

Mai mult

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL 0 8.. Aspecte generale Programarea neliniară are o foarte mare importanţă în rezolvarea problemelor de optimizări,

Mai mult

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (vezi Program C) - BUILD: operație complexă prin care

Mai mult

Ch

Ch Numai pentru uz academic EDK Laborator 4-5 Adăugarea modulelor IP la un proiect hardware Laborator 2: Adăugarea modulelor IP la un proiect hardware Introducere Obiective Acest laborator prezintă procesul

Mai mult

Microsoft Word - 2 Filtre neliniare.doc

Microsoft Word - 2 Filtre neliniare.doc 20 Capitolul 2 - Filtre neliniare 21 CAPITOLUL 2 FILTRE NELINIARE 2-1. PRELIMINARII Răspunsul la impuls determină capacitatea filtrului de a elimina zgomotul de impulsuri. Un filtru cu răspunsul la impuls

Mai mult

LUCRAREA NR

LUCRAREA NR LUCRAREA NR. 5 TIPURI DE DATE STRUCTURATE În C există două categorii de tipuri de date structurate: tablourile şi structurile. Un tablou este o colecţie omogenă de valori de acelaşi tip identificate printr-un

Mai mult

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax:

Facultatea de Științe Politice, Administrative și ale Comunicării Str. Traian Moșoiu nr. 71 Cluj-Napoca, RO Tel.: Fax: Documentație pentru accesarea platformei e-learning de catre profesori Platforma de e-learning a facultății poate fi accesată la adresa http://fspac.ubbcluj.ro/moodle. Conturile profesorilor sunt create

Mai mult

EXCEL FĂRĂ SECRETE Grafice şi diagrame

EXCEL FĂRĂ SECRETE Grafice şi diagrame EXCEL FĂRĂ SECRETE Grafice şi diagrame Cuprins 1. Introducere... 3 2. Crearea graficelor în Excel... 3 3. Mutarea şi copierea graficelor... 11 2 EXCEL FĂRĂ SECRETE- Grafice şi diagrame 1. Introducere Informaţiile

Mai mult

Inferenţa statistică

Inferenţa statistică Tudor Drugan 1 Avihu Boneh As for cholesterol, there have been many studies showing clear association between high cholesterol and coronary heart disease. Unfortunately, the correlation is and will be

Mai mult

Lab6LCD

Lab6LCD LABORATOR 6 - Interfaţă pentru afişor cu cristale lichide (LCD), partea II-a Scopul lucrării În laboratorul anterior s-au implementat funcţiile rd_lcdreg(char vrs), wr_lcdreg(char vrs, char data), void

Mai mult

Utilizare Internet

Utilizare Internet Curs 14 2014/2015 1 Functionalitate La toate temele 1p din nota este obtinut de indeplinirea functionalitatii cerute. orice tehnologie, orice metoda, sa faca ceea ce trebuie Forma paginii prezinta importanta

Mai mult

PowerPoint Presentation

PowerPoint Presentation Auto Id Middleware Preocupă-te de nevoile tale de business, de tehnologie ne ocupăm noi! Vrei să integrezi RFID și alte echipamente Auto Id în procesele tale de business? Concentrează-te pe logica de aplicație

Mai mult

Diapositive 1

Diapositive 1 Tablouri Operatii pe tablouri bidimensionale Lectii de pregatire pentru Admitere 09 / 03 / 2019 1 Cuprins Operatii pe tablouri bidimensionale 0. Tablouri unidimensionale scurta recapitulare 1.Tablouri

Mai mult

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 - METODE AVANSATE DE GESTIUNE A DOCUMENTELOR ȘI A SISTEMELOR DE CALCUL - LABORATOR 7 - Asist. Diana Florina Șotropa www.cs.ubbcluj.ro/~diana.sotropa 1. Adăugarea unei funcții simple: Lansați Microsoft Excel

Mai mult

MergedFile

MergedFile PROIECT DIDACTIC Clasa a V-a Informatică și T.I.C. Proiect didactic realizat de Anișoara Apostu, profesor Digitaliada, revizuit de Radu Tăbîrcă, inspector școlar Informatică Textul și ilustrațiile din

Mai mult

Laborator 5 - Paradigme de Programare

Laborator 5 - Paradigme de Programare Laborator 5 - Paradigme de Programare Dezvoltarea unui GUI utilizând libsdl Graphics și platforma Kotlin-Native Kotlin ca și Python nu au avut din proiectare o bibliotecă specializată în oferirea de facilități

Mai mult

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ

9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atâ 9. Design patterns - Singleton, Factory, Observer Scopul acestui curs este familiarizarea cu folosirea unor pattern-uri des întâlnite în design-ul atât al aplicațiilor, cât și al API-urilor - Singleton,

Mai mult

COMISIA EUROPEANĂ DIRECȚIA GENERALĂ INFORMATICĂ Componenta de aplicare a politicii WiFi4EU Ghid de implementare v1.0 Cuprins 1. Introducere Br

COMISIA EUROPEANĂ DIRECȚIA GENERALĂ INFORMATICĂ Componenta de aplicare a politicii WiFi4EU Ghid de implementare v1.0 Cuprins 1. Introducere Br COMISIA EUROPEANĂ DIRECȚIA GENERALĂ INFORMATICĂ Componenta de aplicare a politicii WiFi4EU Ghid de implementare v1.0 Cuprins 1. Introducere... 2 2. Browsere compatibile... 2 3. Datele colectate... 2 4.

Mai mult

III. Tablouri (Arrays) și Clustere

III. Tablouri (Arrays) și Clustere III. Tablouri (Arrays) și Clustere Sometimes it is beneficial to group data related to one another. Use arrays and clusters to group related data in LabVIEW. Arrays combine data of the same data type into

Mai mult

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Logică și structuri discrete Logică propozițională Marius Minea   marius/curs/lsd/ 3 noiembrie 2014 Logică și structuri discrete Logică propozițională Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 3 noiembrie 2014 Unde aplicăm verificarea realizabilității? probleme de căutare și

Mai mult

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre deosebire de alte sisteme, în Android ecranul este mereu

Mai mult

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N Proceduri stocate Syntax: CREATE PROCEDURE [@param1 type1,...] -- secventa de comenzi SQL O procedura stocata se ruleaza cu EXEC: EXEC Modificarea unei proceduri: ALTER PROCEDURE [@param1

Mai mult

1

1 Contents 1 Automate finite... 2 1.1 Probleme cu AF... 2 1.2 Structuri de date pentru automate finite... 4 2 Gramatici si limbaje; gram. indep. de context... 5 2.1 Limbaje... 5 2.2 Gramatici si limbaje...

Mai mult

Packet Tracer - Configurarea ACL-urilor extinse - Scenariul 1 Topologie Tabela de Adresare R1 Echipament Interfață Adresă IP Masca de subreţea Default

Packet Tracer - Configurarea ACL-urilor extinse - Scenariul 1 Topologie Tabela de Adresare R1 Echipament Interfață Adresă IP Masca de subreţea Default Topologie Tabela de Adresare R1 Echipament Interfață Adresă IP Masca de subreţea Default Gateway G0/0 172.22.34.65 255.255.255.224 N/A G0/1 172.22.34.97 255.255.255.240 N/A G0/2 172.22.34.1 255.255.255.192

Mai mult

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1 Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1 Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort)

Mai mult

PowerPoint Presentation

PowerPoint Presentation Circuite Integrate Digitale Conf. Monica Dascălu Curs Seminar Laborator notă separată Notare: 40% seminar 20% teme // + TEMA SUPLIMENTARA 40% examen 2014 CID - curs 1 2 Bibliografie Note de curs Cursul

Mai mult

Ingineria Sistemelor de Programare

Ingineria Sistemelor de Programare Ingineria Sistemelor de Programare Cuprins Fire de executie Concurrency API (java.util.concurrent) Executia concurenta Concurenta prin intermediul proceselor si a firelor de executie http://www.javamex.com/tutorials/threads/how_threads_work.shtml

Mai mult

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea Declaraţii. Instrucţiuni 19 octombrie 2005 Declaraţii. Instrucţiuni 2 Domeniul de vizibilitate al identificatorilor Pt. orice identificator, compilatorul trebuie sǎ-i decidǎ semnificaţia Identificatorii

Mai mult

Slide 1

Slide 1 - Curs 2 - Verilog HDL reprezintă un limbaj utilizat pentru descrierea sistemelor numerice. Sistemele numerice pot fi calculatoare, componenete ale acestora sau alte structure care manipulează informaţie

Mai mult