Zona informaticienilor

tehnologiA informațiilor și comunicațiilor

#lumeavirtuala #informatii #comunicatii #it #software #hardware #serviciicomputerizate

DOMENII CREATIVE: publicitate & marketing, arhitectură, meșteșuguri, design de produs & grafic și de modă, modă, film, TV & video, radio și fotografie, IT & software și servicii computerizate, activități editoriale, muzee, galerii & bibliotecimuzica, artele spectacolului, arte vizuale.

Sursa definiției și clasificării industriilor creative: Wikipedia (conform DCMS, 2015)

NU-ȚI TRĂI VIAȚA ÎN MOD VIRTUAL! Maxim 8 ore pe zi ar trebui să petreci pe internet!                  

spre ECHILIBRISTICA ÎN LUMEA VIRTUALĂ
INFORMAȚII/ DATE ÎN LUMEA REALĂ și ÎN LUMEA VIRTUALĂ

INFORMAȚIILE/ DATELE ÎN LUMEA REALĂ sunt interpretate de om sau de alte viețuitoare, chiar și de plante prin semnale, cuvinte, sunete, imagini.

INFORMAȚIILE/ DATELE ÎN LUMEA VIRTUALĂ (= biți digitali) sunt interpretate, stocate în calculatoare/ alte dispozitive și transmise între acestea sub forma unei serii de biți, reprezentate digital prin coduri (fiecare BIT - ”cifră binară”, cea mai mică unitate de date/ unitate de bază - poate avea valoarea 0 sau 1 - stări binare sau discrete, precum un comutator poate fi oprit sau pornit).

ASCII (American Standard Code for Information Interchange) este un cod binar folosit de calculatoare pentru a reprezenta și interpreta litere, cifre și caractere speciale (fiecare caracter este reprezentat de 8 biți = octet).

1 = 00110001

a = 01100001

A = 01000001

Datele transformate în serii de biți digitali trebuie convertite în semnale/ impulsuri electrice, optice sau unde wireless (radio/ cu infraroșu/ cu microunde) pentru a fi transmise prin mediul de rețea (suportul fizic, adică fir de cupru, cablu de fibră optică sau unde electromagnetice).

Datele cu caracter personal pot fi oferite voluntar (exemplu: rețele sociale), date observate (capturate - cum ar fi cele privind locația) sau date deduse, care se bazează pe analiza de date oferite sau observate).

 Calculator

HARDWARE
BIOS
Basic Input Output System
SISTEM DE OPERARE
Basic Input Output System
PROGRAME/ APLICAȚII
TRANSMITEREA INFORMAȚIILOR

 Exemplu de comunicație efectivă/ directă - CE

MESAJUL ÎN LUMEA REALĂ 

Exemplu de comunicare prin transmiterea unui mesaj scris între două persoane care cunosc limbi diferite -fiecare persoană are nevoie de un asistent care redactează mesajele (primul nivel al comunicării mesajului), acesta îl dictează traducătoarei (alt nivel al transmiterii mesajului), apoi paginile sunt numerotate și se alcătuiesc mai multe scrisori, care merg la poștă, Poșta  transmite plicurile la oficiul poștal al biroului destinatar, poștașul îl duse la destinație, mesajul este preluat de secretara destinatarului, acesta îl predă șefului ei. (Mesajul între cei doi șefi de firmă este virtual, deoarece nu comunică direct. Rutele pentru fiecare plic pot fi diferite.)

MESAJUL ÎN LUMEA VIRTUALĂ 

Exemplu de comunicare a unei informații prin intermediul unei rețele de calculatoare sau alte dispozitive inteligente - două persoane folosesc două calculatoare-gazdă (calculatoarele sunt gazdă pentru aplicații) - calculatoarele nu au legături directe între ele, ci prin mai multe routere (care implementează 3 niveluri: fizic, legături de date, rețea), urmând protocoale (mesajul pleacă de la calculatorul Expeditorului  - ajunge la server - apoi la routerul rețelei de care este legat serverul - în funcție de IP-ul de destinație, din tabela de routare, alege următorul router din internet - ajunge la destinație)

NIVELURILE COMUNICAȚIEI EFECTIVE ALE FIECĂRUIA DINTRE CELE DOUĂ CALCULATOARE (la fiecare există protocoale de comunicație, seturi de reguli care guvernează formatul și semnificația unităților de date de protocol schimbate între ele de către echipamente care comunică). Pe baza protocoalelor, aceste niveluri pereche - echipamentele - comunică între ele prin intermediul unei interfețe - comunicare virtuală - CV) 

1. FIZIC
La nivel fizic se transmit și se recepționează biți - fără interpretare - prin mediul de comunicație (prin fir, cu cablu sau fără fir, între calculatoare gazdă și echipamente intermediare). - reprezentarea valorilor binare - pentru a circula ghidat prin cablu de cupru (UTP sau coaxial - ca semnal dreptunghiular sau semnal sinusoidal, folosindu-se un modem) sau de fibră optică (comunicația se face prin impulsuri luminoase, de putere mare - cu laser, pentru distanțe mari sau led pentru distanțe mici); - tipul de cablu/ conector - fiecare interfață de comunicație are un soclu care se potrivește cu anumite tipuri de cablu și de conectori; - viteza de comunicație (în mod serial, măsurată în biți/ secundă, ritmul în care transmițătorul lansează în mediul de comunicație biții trebuie să corespundă cu ceea ce este citit de receptor) - trebuie să poată fi suportată de mediul fizic, care are o anumită lățime de bandă.
2. LEGĂTURĂ DE DATE
(Data Link) pentru traficul din interiorul unei rețele locale: - Accesul la mediul de comunicație - la rețele clasice era partajat (folosit în comun - cablul se conecta direct la toate interfețele de comunicație) Protocol MAC (Medium Access - privind accesul la mediul de comunicație) Echipamentele care comunică folosesc unități de date de protocol = Protocol Data Units (PDU) Cadru (Frame - PDU de nivel 2): - Antet (informații despre părțile care comunică, identitatea lor - adresa transmitățorului și a receptorului - pentru a se evita confuziile - echipamentul-receptor trebuie să interpreteze antetul pentru a înțelege că mesajul îi este adresat), Date, Trailer - delimitarea cadrelor (la început va exista un delimitator de start și se încheie cu delimitator de stop - delimitatoare necesare pentru a se deosebi 2 stări posibile: mediu liber sau ocupat); - adresarea Adresă fizică (înscrise în electronica interfeței de comunicație - echivalente datelor referitoare la nume-prenume, CNP ale unei persoane fizice); - detecția erorilor.
3. REȚEA
PACHET (PDU de nivel 3): structura antetului: adresa sursei și a destinației și date - dirijarea pachetelor prin subrețeaua de comuniație (rețele conectate) pentru a găsi calea cea mai bună de la sursă la destinație; - adresarea (adrese logice - echivalente unei adrese de domiciliu în cazul unei persoane); - evitarea congestionărilor (traficul poate fi blocat din cauza aglomerării - ca în trafic rutier - se pot folosi algoritmi de evitare a congestionărilor); - fragmentarea MTU (Maximul Transfer Unit - dimensiunea maximă a unui pachet care poate fi transmis pe o conexiune) - pachetele mari pot fi fragmentate în pachete mai mici la nivelul routerelor, apoi se reasamblează; - contabilizarea traficului.

Următoarele niveluri sunt specifice calculatoarelor gazdă

4. TRANSPORT
SEGMENT (- PDU de nivel 4 - primul nivel la care are loc o comunicație de tip capăt-la-capăt între calculatoarele gazdă) - fiecare segment are un antet (conține numerele de port - care identifică aplicația care generează segmentele și aplicația căreia îi sunt destinate datele); - segmentare - operație similară MTU - împărțirea unei informații mari în segmente; - stabilirea/ încheierea de conexiuni; - controlul fluxului; - multiplexare (prin aceeași conexiune de rețea se pot vedea mai multe aplicații - un tab cu email, unul cu un browser etc. - ca niște plicuri diferite de dimensiuni diferite); - numere de port - servicii sigure. bazate pe conexiune, fără erori și în ordinea în care au fost transmisă cu o probabilitate apropiată de 100% (exemplu: legătura telefonică) - prin segmentare are sunt confirmate la destinație și retransmitere - servicii de tip datagrama au antete mai simple pentru rapiditatea transmiterii datelor (de exemplu, serviciu radio online) și eficiență - protocolul UDP (User Datagram Protocol)

Următoarele 3 niveluri sunt comasate într-unul singur în modelul TCP/ IP (sunt operațiuni specifice aplicațiilor

5. SESIUNE în modelul OSI
- gestionarea jetonului (mecanism de control) - resursă logică care permit anumite proprietărți - asigură acces ordonat la o resursă partajată; - controlul dialogului - determină cine, când, cum poate trimite date îmtr-o sesiune activă; - sincronizarea - inserarea de puncte de control în cadrul unei sesiuni de comunicare (în cazul unei întreruperi, se poate relua transferul de date de la un punct intermediar
6. PREZENTARE
- datele sunt convertite între formatele utilizate de aplicații și formatul standard folosit pentru transmiterea în rețea (formate de caractere - ASCII și EBCDIC, formate numerice - little-endian și big-endian, structuri de date complexe - reprezentări grafice sau obiecte); - autentificare; - criptare; - compresie.
7. APLICAȚIE
- aplicații spre serviciile rețelei folosite pentru a trimite, primi și interpreta datele într-un format înțeles de utilizator, dar și de alte aplicații de rețea (protocoale: http/ https - pentru navigare pe web; ftp - pentru transfer de fișiere; SMTP/ POP3? IMAP - pentru e-mail; DNS - pentru rezolvarea numelor de domeniu; SSH/ Telnet - pentru acces la distanță)

MEDIU DE COMUNICAȚIE PARTAJAT într-un spațiu, în atmosfera comună se propagă sunete, așadar trebuie să existe o ordine în comunicare a celor prezenți (pentru exactitate, se poate menționa nume, prenume și CNP - echivalentul adreselor fizice din nivelul Legături de date).

PROTOCOL MAC (Medium Access) - într-un mediu fizic pe cupru sau wireless trebuie să există reguli (protocol) de transmitere a informațiilor (acces la mediul de comunicație)

ZGOMOTE ÎN COMUNICARE

DETECTAREA ERORILOR - ZGOMOTE ÎN TRANSMITEREA DATELOR ÎN MEDII FIZICE - recepționarea incorectă a informațiilor la destinație, verificarea făcându-se prin calcularea unei sume de control pe baza datelor (cu algoritmi) . Dacă apar erori, nu se fac corecții la nivelul Data Link, doar la următoarele niveluri.

MESAJUL REDUNDANT - spune același lucru de mai multe ori, fără să adauge informații noi.

REDUNDANȚĂ ÎN TRANSMITEREA UNUI MESAJ ÎN REȚEA - mai multe căi de transmitere a mesajului către o destinație printr-o rețea cu comutare de pachete (un mesaj - e-mail/ flux video etc. - este împărțit în blocuri video). Așadar, dacă o cale eșuează, mesajele sunt trimise pe altă cale (rețea tolerantă la erori).

Rețeaua Internet (global)
Conform Wikipedia: „desemnează o rețea mondială unitară de calculatoare și alte aparate cu adrese computerizate, interconectate conform protocoalelor (regulilor) de comunicare Transmission Control Protocol și Internet Protocol, numite împreună stiva TCP/IP.”

Calculatorul/ telefonul (alt dispozitiv) conectat la rețeaua Internet (printr-un dispozitiv conectat la rețeaua globală se poate comunica sau accesa informații/ date) 

TCP
- Transmission Control Protocol (Protocolul de control al transmisiei) - gestionează conversațiile individuale, garantează livrarea informațiilor și gestionează controlul fluxului între dispozitivele finale.
Adresa IP
- identificator numeric unic al fiecărui dispozitiv dintr-o rețea, necesar în comunicare (exemplu: 192.168.1.10) - indică și rețeaua la care este atașată gazda
PROTOCOALE ȘI STANDARDE (modele arhitecturale) pentru comunicație în rețea (detalii OSI, TCP/ IP și Netware)
- STANDARDE, PROTOCOALE și SERVICII pentru comunicarea în rețea MODELE ARHITECTURALE: - OSI (Open Systems Interconnection) ISO (International Standards Organization) - face recomandări detaliate privind funcțiile pe care ar trebui să le îndeplinească echipamentele unei rețea - TCP/IP (Transmission Control Protocol / Internet Protocol) – urmează recomandările OSI definind standarde - IETF Internet Engineering Task Force (cu RFC - Request For Comments = se poate contribui cu comentarii) - Netware (propus de compania Novell) - este mai vechi decât modelul OSI - echipamentele de rețea sunt organizate ca un PC - în 4 niveluri: nivelul N este furnizor pentru nivelul N+1 și consumator de resurse pentru nivelul N-1 - UDP (User Datagram Protocol); - DNS (Domain Name System) - serviciu care traduce numele de domeniu în adrese IP, permite astfel accesarea serverelor după nume, nu după IP; - IP Adres
Backbone internațional (rețea fizică globală de cabluri)
= (șira spinării) rețea globală de cabluri submarine și terestre conectate la routere în noduri majore, în marile centre de date internaționale/ stații sol pentru sateliți (sateliții sunt gestionați de un operator, care transmite la o stație sol - poate fi și un ISP)
Tier (deținător/ operator al unei rețele fizice globală de cabluri, furnizor principal de Internet)
TIER 1 - este categoria de deținător independent de rețele fizice, care dau mai departe acces la rețea către furnizori din categoriile TIER 2 (rețele mari) sau TIER 3 (ISP locale)
ISP (furnizor local - DIGI, TELEKOM/ VODAFONE, ORANGE etc. - client al unui Tier)
= furnizori de rețea la care se conectează dispozitive. Opțiuni de conectare la un furnizor ISP: - cablul de bandă largă, - linia digitală de abonat (DSL) de bandă largă, - rețelele WAN wireless - serviciile mobile Opțiuni business: - DSL business, - linii închiriate - Metro Ethernet
WAN (folosind medii de comunicație - Network Media - cu cabluri sau fără cabluri) 
- (Wide Area Network) - rețea pentru arii largi, ca exemplu fiind cele administrate de ISP sau de o companie mare, un campus universitar (care poate fi organizat ca intranet) etc. O rețea WAN poate interconecta rețele LAN.

Internetul este o colecție de rețele LAN și WAN interconectate.

(un dispozitiv final se poate conecta direct la satelit, dar fără flux de date complet și cu viteze mici)

CONECTARE LA INTERNET

cu calculator sau IoT

Router - Home/ Default Gateway
- HOME GATEWAY = dispozitiv care este punct central de conectare a rețeie locale cu rețeaua internet; DEFAULT GATEWAY = adresa IP a router-ului care permite accesul din rețeaua locală către alte rețele
LAN (folosind medii de comunicație - Network Media - cu cabluri sau fără cabluri) 
- (Local Area Network) rețea locală într-un spațiu mic (casă, spațiu mic pentru birouri) - se utilizează cel mai frecvent interfata Ethernet pentru conectarea dispozitivelor cu cablu
Peer to Peer
= comunicare în rețea de tip egal la egal - în cazul calculatoarelor având ambele roluri: ca servere și clienți în rețea (de exemplu: un PC care este conectat la imprimantă printr-un cablu USV, iar la rețea printr-o placă de interfață de rețea - NIC)
Calculator gazdă (Host Roles)/ dispozitiv final
- calculatorul/ dispozitivul gazdă conectat la rețea (Internet), putând fi dispozitiv final (gazdă), căruia i se alocă un număr de indentificare în comunicare (IP)
Server (calculator)
- calculator cu software care permite furnizarea de informații (e-mailuri sau pagini web) către alte dispozitive - are rolul de a asigura servicii altor dispozitive din rețea (clienți gazdă - DHCP, DNS, HTTP care au software pentru solicitarea și afișarea informațiilor - un browser web, de exemplu, dar, în același timp, și o fereastră pentru e-mail sau altceva)
Concentrator (Switch)
- conectează mai multe dispozitive într-o rețea locală (LAN), permițându-le să comunice între ele
Dispozitiv de destinație (End Device)
- fiecare dispozitiv de destinație (sursă sau destinație a mesajului transmis prin rețea) are o adresă

sau

IoT (Internet of Things)
Rețea de dispozitive (aparate electrocasnice, senzori, camere video, smartphone etc.) conectate prin internet, cu rolul de a colecta și schimba date. - HOME GATEWAY - asigură conectivitatea rețelei interne a locuinței la internet. - IoT Server - element al rețelei care primește date de la dispozitivele casei și permite controlul lor pntr-o interfață web.

CONECTARE LA INTERNET

cu telefon

Smartphone
= (nivel/ strat)

CREATIVI @ ROSFERA

(profesioniști din Rețeaua creativilor sau amatori pasionați din Cercul pasionaților) sunt susținuți prin implicarea în proiectele derulate și promovarea lor sau a activităților lor. 

Zona O.N.G.  @ Rosfera

Partenerii noștri  care au ca pasiune binele.

Hardware & REȚELE

RAM (Random Access Memory)
- memorie volatilă care conține confirgurația curentă și alte date temporare
NVRAM (Non Volatile RAM)
- memorie permanentă care conține configurația de pornire

 REȚELE - medii de comunicație

PACKET TRACER
Simulează funcționarea internă a unei rețele (adăugarea unor dispozitive în rețea și modul de conectare a acestora - prin cablu sau wireless; este posibilă selectarea, inspectarea, etichetarea, ștergerea sau gruparea de componente în rețea; se poate gestiona rețeaua, realizarea unei topologii logice sau fizice, modificarea profilului de utilizator sau a unor setări - în File - Open Sample sunt exemple) - descărcare: https://www.netacad.com/resources/lab-downloads

Meniul: - DISPOZITIVELE DIN REȚEA (Network Devices): rutere, comutatoare (Switches), hub-uri, dispozitive wireless (Home Gateway este DLC100), securitate, emulare WAN; - DISPOZITIVE TERMINALE - IoT pentru uz personal sau pentru casă/ dedicate orașelor inteligente/ destinate industriei/ pentru rețeaua electrică; - COMPONENTE pentru IoT - plăci, actuatoare, senzori; - CONEXIUNI - pentru interconectarea dispozitivelor în rețea, incluzând și cablarea structurată - în panouri de conexiuni (Patch Panels) sau suporturi pe perete; - MISCELLANEOUS (Diverse) - dispozitive cu cerințe specifice; CONEXIUNI MULTIUTILIZATOR - conectarea cu alți utilizatori din rețea sau o conexiune la o rețea de arie largă

ACȚIUNI SIMULATE ÎN PACKET TRACER: - CABLARE STRUCTURATĂ; - INSPECT Front sau Rear (cu această funcție se pot identifica porturile disponibile); CONFIG TAB (Fila de configurare) - unde se pot activa sau dezactiva porturi, se pot seta interfețe, SSID-uri, parole, adrese IP, alți parametrii de configurare a rețelei - MANAGE ALL CABLES ON RACK - cu această opțiune se pot organiza automat cablurile în dulap (rack); - CREATE BENDPOINT - opțiune care permite fixarea cablurilor în anumite puncte ale unui spațiu fizic
Terminal Emulation Program - Putty, Tera Term, SecureCRT
- se pot utiliza pentru conectare la un dispozitiv de rețea fie printr-o conexiune serială printr-un port de consolă, fie printr-o conexiune SSH/Telnet.

Componente ale rețelei (Gazdă - Host Roles, comunicarea în rețea de tip egal-la-egal - Peer to Peer, dispozitive intermediare - Switch, Wireless Router -, dispozitive de destinație - End Devices, medii de comunicație - Network Media - cu cabluri sau fără cabluri) 

CONEXIUNI (cu cabluri metaliceserial - conectarea fizică între un calculator și un router sau

Medii de comunicație (Network Media - căile prin care informația ajunge de la destinatar la expeditor)

Cablu cu fire metalice 
- datele sunt transmise prin impulsuri electrice
Cablu cu fibre optice 
- fibre de stică sau plastic - datele sunt transmise prin impulsuri de lumină
Wireless
- (fără fir) datele sunt transmise prin modularea unor frecvențe specifice ale undelor electromagnetice.
Lățimea de bandă (biți care pot fi transmiși pe secumundă - bps)
- dacă apare congestia rețelei (cererea de lungime de bandă depășește capacitatea acesteia), dispozitivele vor păstra pachetele de date în memorie până când vor exista resurse pentru a fi transmise)
QoS (= Quality of Service) - mecanism din rețele - router - care controlează și prioritizează traficul
- dacă apare congestia rețelei (cererea de lungime de bandă depășește capacitatea acesteia), dispozitivele vor păstra pachetele de date în memorie până când vor exista resurse pentru a fi transmise. De exemplu, apelurile au prioritate față de paginile web.

Conexiune de consolă (serial - conectarea fizică între un calculator și un router sau un switch se face cu un cablu de consolă, care poate fi USB sau serial, nefiind necesară o adresă IP)

Emulator de terminal (Terminal Emulator)
- aplicație software pentru interacțiune cu dispozitivele din rețea

Cablare structurată (adăugarea de cabluri în panoul de conexiuni și în prize într-un scenariu fizic) - echipamente și componente hardware

Panou de conexiuni (Patch Panel)
- montat pe un suport cu cadru, cuprinzând switch-uri sau alte echipamente, pentru conectarea cablurilor unei rețele
Priză sau alt element de conectare cu montare pe perete (Wall Mount/ Copper Wal Mount)
- fiind conectat la un panou de conexiuni, este util pentru a lega dispozitivele la rețea prin cabluri de cupru
Fast Ethernet (FE)
- interfață de rețea prin cablu pentru IoT, asigurând viteze până la 100 Mbps - cel mai frecvent utilizată în rețele LAN
Porturi de rețea de mare viteză de 1 Gbps (Gigabit Ethernet - G1/0/x) 
- de pe un switch sau un server, utilizate pentru conectarea echipamentelor de rețea
Cablu Ethernet (Copper Straight-Through Cable) 
- folosit pentru a conecta dispozitive (de exemplu: PC la switch, switch la router sau la patch panel)
Dulap metalic pentru echipamente de rețea (Rack/ Equipment Cabinet)
- montarea în mod organizat a echipamentelor de rețea (switch-uri, patch panel-uri, servere etc.)
 Interfață
- dispozitivul de rețea cuprinde porturi destinate conexiunilor individuale
Port fizic
- un conector pe un dispozitiv de rețea destinat conectării la un dispozitiv final sau la alt dispozitiv de rețea
Placă de interfață de rețea (NIC)
- Network Interface Card - pentru conectarea dispozitivului la rețea
SSH
- o metodă în bandă și recomandată pentru stabilirea de la distanță a unei conexiuni CLI securizate, printr-o interfață virtuală, printr-o rețea
Telnet
- o metodă nesigură, în bandă, de stabilire de la distanță a unei sesiuni CLI, printr-o interfață virtuală, printr-o rețea (nu oferă o conexiune criptată și securizată).
Concentrator (Switch)
- conectează mai multe dispozitive într-o rețea locală (LAN), permițându-le să comunice între ele - acesta poate fi configurat (global config mode)
Conector (Punchdown)
- folosit pentru conectarea cablurilor în patch panel sau wall mount - fiecare conector corespunde unui port Ethernet
Default (Home) Gateway - ex.: 192.168.1.1 
- HOME GATEWAY = dispozitiv care este punct central de conectare a rețeie locale cu rețeaua internet; DEFAULT GATEWAY = adresa IP a router-ului care permite accesul din rețeaua locală către alte rețele
Adresa IP
- identificator numeric unic al fiecărui dispozitiv dintr-o rețea, necesar în comunicare (exemplu: 192.168.1.10) - indică și rețeaua la care este atașată gazda
 IPV4 (configurare) - ex.: 192.168.1.10
- sunt atribuite dispozitivelor individuale conectate la o rețea.- notație zecimală punctată (patru numere zecimale între 0 și 255); - configurare IPv4 pentru un calculator gazdă cu Windows: Panoul de control > Centru de partajare rețea > Modificare setări adaptor (apoi: clic dreapta și selectare Proprietăți pentru a afișa Proprietățile Conexiunii locale) - Selectare Internet Protocol versiunea 4 (TCP/IPv4) și clic pe Proprietăți pentru a deschide fereastra Proprietăți Internet Protocol versiunea 4 (TCP/IPv4)
IPV6
Adresele IPv6 au o lungime de 128 de biți și sunt scrise ca un șir de valori hexazecimale (fiecare grup de 4 biți este reprezentat de o singură cifră hexazecimală). Grupurile de patru cifre hexazecimale sunt separate prin două puncte (:). - Opțiunile de adresare și configurare IPv6 sunt similare cu cele pentru IPv4
Mască de rețea (Subnet Mask) - ex.: 255.255.255.0 
- definește ce parte a adresei IP identifică rețeaua și ce parte identifică dispozitivul (exemplu: 255.255.255.0). - O mască de subrețea IPv4 este o valoare pe 32 de biți care diferențiază porțiunea de rețea a adresei de porțiunea de gazdă.
Server DHCP
- DHCP (Dynamic Host Configuration Protocol) - (protocol de configurare dinamică a gazdei din rețea) elimină necesitatea configurării manuale a fiecărui dispozitiv, alocând AUTOMAT ADRESE IP, masca de rețea, gateway și DNS dispozitivelor din rețea
Web Server
- pentru pagini web, accesate de clienți prin protocolul HTTP
DNS (Domain Name System)
- serviciu traduce numele domeniu în adresă IP
Configurare dispozitive pentru acces wireless

Conectarea dispozitivelor utilizând tehnologii wireless 

SSID (Service Set Identifier)
- numele unei rețele WIFI afișat în lista de rețele disponibile în momentul conectării unui dispozitiv
Access Point (AP)
- dispozitiv conectat la rețeaua cablată, folosit pentru crearea unei rețele WLAN, care permite conectarea altor dispozitive wireless
WLAN (Wireless Local Area Network)
- rețea locală fără fir, în care dispozitivele pot comunica între ele sau să acceseze internetul prin unde radio, conectându-se la un punct de acces (Acces Point) sau un router WiFI
Wireless Module
- modul hardware utilizat într-o rețea wireless pentru a permite dispozitivelor să se conecteze la rețea
Bluetooth
- Tehnologie (wireless) pentru comunicații la distanțe mici, care se poate folosi pentru a conecta dispozitive făr a folosi internet sau router
Bluetooth Pairing (asociere)
- două dispozitive având Bluetooth se identifică reciproc și stabilesc o conexiune sigură pentru a transfera date sau a partaja resurse
3G/ 4G/ 5G Cell Interface
- interfață a unui telefon mobil prin care se conectează la rețeaua celulară a operatorului de telefonie mobilă
Tether/ Tethering
- o funcție a unui dispozitiv prin care poate partaja conexiunea sa la internet unui alt dispozitiv
WPA-PSK (Wi-FI Protected Access - Pre-shared Key)
- o funcție pentru securitatea conexiunilor wireless folosindu-se o parola comună PSK
Conectarea unui calculator la o rețea WLAN

(este necesară existența unui modul wiress în dotarea calculatorului)

1. CONFIGURARE (Settings)

- Networks & Internet > Wi-FI > Hardware Properties (aici se văd numele rețelei SSID, la care calculatorul se poate conecta dacă se cunoaște parola; se poate verifica adresa IP)

Conectarea unui calculator prin bluetooth la un alt dispozitiv

(este necesară existența unui modul bluetooth în dotarea calculatorului)

1. CONFIGURARE (Settings)

- Bluetooth & Devices > Bluetooth ON (activarea este necesară la ambele dispozitive) > Add a Device (Pair) > click pe numele dispozitivului care apare în listă

Configurare router wireless integrat și un client wireless care să se conecteze la Internet (în siguranță)
IPv4 IPv6
SISTEME PENTRU A TESTA ȘI DEPANA O CONEXIUNE LA REȚEA
KERNEL 
- componenta sistemului de operare care face legătura cu hardware - gestionează procesorul, memoria RAM și dispozitivele hardware - prin drivere
SHELL 
- interfața prin care utilizatorul comunică cu sistemul de operare (cu kernel) - printr-o comandă text în interfața CLI sau printr-un meniu, într-o interfață GUI (este de preferat să se folosească interfața CLI, fiind mai stabilă și necesitând mai puține resurse).

Software

SISTEM DE OPERARE 
= arată utilizatorului printr-o interfață cum sunt controlate și gestionate componentele unui calculator sau dispozitiv electronic și cum rulează programele
FIRMWARE
- software de bază, care gestionează funcționarea unui hardware (inclusiv a unui router)
SANCȚIONAREA PIRATERIEI DIGITALE ÎN LEGISLAȚIA ROMÂNEASCĂ 
Legea 8/ 1996: închisoare de la 1 la 4 ani pentru instalare ilegală de software și închisoare de la 3 la 12 ani pentru comercializare

PROGRAMAREA = crearea unui produs-program:

- descrierea algoritmilor 

&

- codificarea algoritmilor într-un limbaj de programare

ALGORITM = o succesiune finită de blocuri  (pași)
= o metodă sau o procedură de calcul, alcătuit dintr-o succesiune finită de BLOCURI = pași (operații, instrucțiuni), clar definiți, care trebuie parcurși, într-o anumită ordine (reprezentată grafic prin săgeți), pentru a rezolva o problemă (de la intrare la ieșire)

 Problemă?

(click pe + sau - pentru a desfășura sau restrânge conținutul reperelor)

PAȘI ÎN REZOLVAREA UNEI PROBLEME (SOFTWARE)

 1. Definirea și analizarea problemei

- CITEȘTE (în matematică = ce se dă?): se comunică algoritmului informații (cu enunț clar, precis al problemei - specificarea cerințelor și datelor de intrare și ieșire)

2. Algoritm

- SCRIE (în matematică = ce se cere?): algoritmul comunică informații - un set de date

 - PROIECTAREA ALGORITMULUI - Stabilirea metodei de rezolvare pas cu pas

3. Codificarea într-un limbaj de programare

 

Codarea informației în sistem binar 
- tranzistorul (un întrerupător microscopic) controlează fluxul de curent electric: 1 = închis (curentul nu trece); 0 = deschis (curentul trece) - grup de 8 biți = 1 byte (1 octet) - 1 KB (kilobyte) = 1024 byte sau 1024 x 8 biți - 1 MB = 1024 kb - 1 GB = 1024 mb - 1 TB (terabyte) = 1024 gb Codul ASCII (American Standard Code for Information Interchange) se foloseste pentru transformarea fiecarui caracter într-un byte (într-o secvenţă de lungime fixă (8 cifre binare) Conversii numerice in sistem binar (Tabel 432/ 4321, IEEE 754)

- limbaj (binar) între om și mașină (calculator sau alt dispozitiv), o sintaxă specifică utilizată pentru scrierea programelor

- COD SURSĂ (text scris într-un limbaj de programare - de exemplu: C, C++, C#, Python, Java etc., folosindu-se un fișier text, cum ar fi Notepad)

(DESCOMPUNEREA CODULUI: se recomandă ca problema/ CODUL să fie împărțit în bucăți bine izolate, care să fie codificate fiecare sub forma unei funcții - astfel se poate testa fiecare funcție separat)

Biblioteci

- COMPILATOR - analizează textul programului și îl traducere în program (cod sursă - compilator - cod executabil/ mașină) - programul poate fi executat și fără a folosi un compilator, viteza de executare este mai ridicată (date de intrare - program executabil - date de ieșire)

- INTERPRETATOR - analizează și execută în același timp instrucțiunile (date de intrare & cod sursă - interpretator - date de ieșire)

 

- rezultă un PROGRAM = reprezentarea unui algoritm într-un limbaj - un fișier binar (cu extensia .exe în Windows), care presupune descrierea datelor și definirea unor instrucțiuni de procesare, adică se poate executa (lansa în execuție) sau rula

(timpul de rulare și dimensiunea memoriei folosite trebuie să fie cât mai mici)

- DEBUGGER/ DEPANATOR - rulându-se pas cu pas, se poate DEPANA programul creat (folosindu-se un breakpoint, se găsesc la fiecare pas rezultate intermediare) - PyCharm conține și un depanator, care permite interogarea pas cu pas a codului

4. Testarea și validarea programului

- rulează și se comportă conform așteptărilor?

- oferă rezultate conform cerințelor stabilite?

 5. Întocmirea documentației

Principalele activități într-un proiect software

1. ACTIVITĂȚI DE MANAGEMENT AL PROIECTULUI

IDEEA - descrierea proiectului propus:
1. ce aduce nou/ interesant proiectul? 2. care ar fi alte 3 proiecte similare si ce diferențe ar avea noul proiect? 3. în cazul unui site/ aplicații, c9e funcționalități ar avea fiecare utilizator?
Agile

AGILE = metodologie de management al proiectelor, având scopul de a se diminua riscurile de dezvoltare și de a se controla timpul de execuție prin implementarea proiectelor în mod flexibil și interactiv

 1. Scrum

 ORGANIZAREA PARTICIPANȚILOR:

- Product Owner

- Scrum Master

- Echipa

2. ACTIVITĂȚI TEHNICE

MACHETA 

a. Definirea cerințelor utilizatorului

b. Definirea cerințelor software-ului (programului/ aplicației) > Document de cerințe software (Specificația de sistem)

Diagrame UML

DIAGRAME UML (The Unified Modeling Language) = este un limbaj de modelare (unificat) obiect si nu o metodă-obiect - o modalitate de a dezvolta modele bogate, care descriu funcționalitățile unui sistem software sau hardware, rezultând documentația necesară unui proiect de dezvoltare (Care sunt entitățile? - Care sunt relațiile dintre ele?).

Diagrama cazurilor de utilizare (Use Case Diagram) - modelează serviciile, sarcinile, funcția pe care un sistem trebuie să le îndeplinească:

- elemente: Actor (o entitate care interacționează cu sistemul - un utilizator, de exemplu), Use Case (caz de utilizare reprezintă o funcționalitate distinctă a unui sistem, a unei componente, a unui pachet sau a unei clase - după analiza întregului sistem, se stabilește o funcționalitate de bază, apoi se organizează cazurile de utilizare, se stabilesc diverși actori sau lucruri care vor interacționa cu sistemul) și Asociere

- relații între use case-uri (relația fiecărui autor cu cazul de utilizare sau cu un sistem): trebuie identificat numărul total de moduri în care un actor ar putea interacționa cu sistemul (este posibil să interacționeze cu mai multe cazuri de utilizare simultan, dar dacă un caz de utilizare sau un actor are mai multe relații, trebuie afișate doar interacțiunile semnificative). 

EXEMPLU DE USE CASE DIAGRAM/ DIAGRAMĂ DE UTILIZARE - Zona ONG

ZONA ONG (actori: ONG-SPECIALIST)

 ACTOR

USE CASE (funcționalitate)

 ACTOR

ONG (= utilizator-beneficiar) 

1. funcționalitate: problemă de rezolvat (ex. depunere declarație)

SPECIALIST (ex. contabil)

-

2. funcționalitate: rezolvare problemă (ex. depunere declarație)

SPECIALIST (ex. contabil = utilizator implicat)
ONG (= utilizator-beneficiar) 

3. funcționalitate: status/ stadiu rezolvare (use case de includere)

SPECIALIST (ex. contabil)
ONG (= utilizator-beneficiar) 

4. funcționalitate: recenzie pentru specialist (use case de extensie - opțional)

-

Pe baza specificațiilor definite, se poate crea macheta (mockup) proiectului (aplicație/ website etc.), folosindu-se instrumente precump FIGMA, BALSAMIQ etc.).

c. Proiectare arhitecturală

d. Proiectare detaliată

e. Implementarea unităților programului (modulele)

f. Integrarea

g. Testarea de sistem

h. Testarea de acceptare

i. Întreținerea și operare

3. ACTIVITĂȚI DE ASIGURARE A CALITĂȚII

 

Medii vizuale de programare

SCRATCH (limbaj de programare vizual, util începătorilor - și copiilor - pentru a crea jocuri, animații, alte mici proiecte și a înțelege noțiuni de bază ale limbajelor de programare, precum tipuri de date, variabile, instrucțiuni de control etc.) - se poate folosi on line sau descărca pe calculator
(https://scratch.mit.edu)

(click pe + sau - pentru a desfășura sau restrânge conținutul reperelor)

Realizarea unui joc ”Prinde mingea”
1. SPRITE - ALEGEREA PERSONAJULUI (SAU A UNUI OBIECT) CARE PRINDE MINGEA

(în colțul din dreapta-jos al ecranului) CLICK PE CAPUL PISICII > se alege personajul (pisica este personaj implicit)

2. CREAREA DE BLOCURI (PENTRU REALIZAREA COMENZILOR - acțiuni, sunete etc.)

(se trag piesele din coloana stângă în partea centrală) - acțiunea începe dacă se face click pe steagul verde - se adaugă în block din secțiunea EVENIMENTE (EVENTS - cu bulină galbenă) CÂND SE FACE CLICK PE STEAGUL VERDE (WHEN FLAG CLICKED) 

- schimbarea poziției pisicii: din secțiunea MOTION (cu bulina albastră) > se trage CHANGE/ MODIFICĂ x CU 10 (apăsând tasta săgeata dreapta)

MIT APP Inventor (mediu de programare vizual, pe înțelesul tuturor, cu care se pot realiza aplicații pentru telefon sau tabletă) - crearea aplicațiilor în mediul online (https://login.appinventor.mit.edu)
Realizarea unei aplicații ”Prinde mingea”
1. CREAREA APLICAȚIEI

(în colțul din stanga-sus al ecranului) CREATE APPS (necesită crearea unui cont) > în meniul de sus: PROJECTS > START NEW PROJECTS > CREATE NEW APP INVENTOR PROJECT

2. SETAREA ECRANULUI

- (setarea ecranului fără derulare - pentru ca ecranul interfeței să fie corect poziționat) > în meniul din stânga: DRAWING AND ANIMATION > CANVAS (se trage în coloana din mijloc a ecranului) > în dreapta ecranului, prima coloană - click pe SCREEN1 > în dreapta ecranului, a doua coloană - în DESIGNER - Scrollable trebuie să fie debifat

- (setarea dimensiunilor ecranului interfeței) > în meniul din stânga: DRAWING AND ANIMATION > CANVAS (se trage în coloana din mijloc a ecranului) > în dreapta ecranului, prima coloană - click pe CANVAS1 > în dreapta ecranului, a doua coloană - în DESIGNER - la HEIGHT și la WEIGHT, de bifat FILL PARENT

3. ADĂUGAREA UNEI MINGI

- în meniul din stânga: DRAWING AND ANIMATION > BALL (se trage în coloana din mijloc a ecranului) > în dreapta ecranului, prima coloană - click pe BALL1 > în dreapta ecranului, a doua coloană - în DESIGNER - se poate schimba dimensiunea mingii la RADIUS

- în dreapta ecranului, a doua coloană - click BLOCKS > în stânga ecranului: SCREEN1 CANVAS1  > BALL (se adaugă blocuri) > se trage în centrul ecranului blocul ”when - Ball 1 -.Flung ... x y speed heading xvel yvel... do” - marcat cu maro (Flung declanșează la o glisare rapidă cu degetul pe ecran acțiunea de aruncare a mingii - aruncare = flinging)

- SETAREA DIRECȚIEI ȘI A VITEZEI MINGII: în stânga ecranului: SCREEN1 CANVAS1  > BALL (se adaugă blocuri) > se trag în centrul ecranului blocurile ”sett - Ball 1 - Speed - to” (se setează viteza mingii la aceeași valoare cu a gestului de glisare a degetului pe ecran) și ”sett - Ball 1 - Heading - to” (se setează direcția mingii, care să fie aceeași cu a gestului de glisare a degetului pe ecran) - marcate cu verde > cele două blocuri pentru viteză (speed) și direcție (heading) trebuie să fie (conectate) în interiorul blocului .Flung > cu click pe parametrii SPEED și HEADING se adaugă blocurile GET SPEED și GET HEADING (cu portocaliu)

- SETAREA ACȚIUNII MINGII DE A LOVI MARGINILE ECRANULUI (se folosește argumentul EDGE): în stânga ecranului: SCREEN1 CANVAS1  > BALL (se adaugă blocul) > se trag în centrul ecranului blocurile ”when - Ball 1 -.EdgeReached”

4. TESTAREA APLICAȚIEI PE TELEFON SAU PE TABLETĂ

- se instalează pe device aplicația (din App Store/ Magazin Play...) MIT APP INVENTOR > din mediul de programare de pe desktop, în meniul de sus - CONNECT AI COMPANION > se generează un QR CODE care se poate scana cu aplicația instalată pe device sau un cod care se poate introduce în aplicație.

NODE RED (mediu de programare vizual, bazat pe fluxuri de date) (https://nodered.org/)
 Rulare în Windows (instalare pentru Windows)
API Hello, World cu Node Red (+ Echo HTTP)

(înainte de a începe, se deschide din Start > Node.js Command Prompt (în folder Node.js) > se tastează comanda node-red 

1. DESCHIDEREA UNUI PROIECT NOU

(în browser) http://localhost:1880 - se va deschide o fereastră Flow1

2. API ”Hello” + Echo HTTP

- (din secțiunea stângă a ecranului) se trag nodurile: http in (method: GET, url: /hello) click Done - function (msg.payload = { message: "Hello, World!" }; return msg; ) click Done - json (Property: msg.payload) click Done - http request (poate rămâne necompletat) - se creează  legături între ele

- (tot din secțiunea stângă a ecranului) se trag nodurile: http in (method: POST, url: /echo) click Done json (Property: msg.payload) click Done - function (return msg; ) click Done json (Property: msg.payload) click Done http request (poate rămâne necompletat) - se creează  legături între ele

3. Deploy

- (în dreapta sus a ecranului) click DEPLOY

4. Afișare

(în browser) http://localhost:1880/hello - se va deschide o fereastră cu conținutul Hello, World

 

Limbaje de programare

 Limbaj de marcare
Utilizează simboluri sau etichete într-un text. delimitând, identificând și descriind informații specifice.

HTML - limbaj de marcare (a textului astfel încât să poată fi afișat) pentru publicarea documentelor pe internet

"Hello, World!" cu HTML

<!DOCTYPE html>

<html>

  <head>

    <title>Heading Example</title>

  </head>

  <body>

    <h1>Hello, World!</h1>

  </body>

</html>

- se folosește un set fix de marcaje (tag-uri = un șir de caractere delimitat de caracterele ”<" și ”>") prestabilite pentru a se defini modul în care este afișat conținutul pe internet (nu se referă la tipul informației conținută în document)

XML - limbaj de marcare extensibil (generic) - marcare a datelor pentru a fi înțelese/ procesate automat de calculator, destinat structurării (de date ierarhice folosind etichete personalizte) și schimbului de date (transportului/ transferului) între sisteme și aplicații diferite

- se folosesc (tag-uri = un șir de caractere delimitat de caracterele ”<" și ”>") care conțin date caracter - marcajele și datele caracter formează un DOCUMENT XML.

- un FIȘIER XML este format din: PROLOG (instrucțiune de procesare, care indică versiunea - 1.0, encodarea setului de caractere - UTF-8), DEFINIȚIA TIPULUI DE DOCUMENT (opțională) și ELEMENTUL RĂDĂCINĂ, care este unic (în exemplul ”Hello, World!” ceea ce este cuprins între tag-urile <message> și </message>).

- formatul XSD arată că este un fișier XML, în care s-a folosit o schemă pentru definirea structurii, conținutului și regulilor de validare ale unui document xml.

Descărcarea (gratuit) editorului XML COPY EDITOR: http://xml-copy-editor.sourceforge.io

"Hello, World!" cu XML

<?xml version="1.0" encoding="UTF-8"?>
<message>
     <greeting>Hello, World!</greeting>
</message>

Exemplul BIBLIOTECA, de document XML care conține date

<?xml version="1.0"?>
<BIBLIOTECA>
     <CARTE>
           <TITLU>Poezii</TITLU>
           <AUTOR>Mihai Eminescu</AUTOR>

     </CARTE>
</BIBLIOTECA>

Crearea unui fișier XML cu Excel
  •  1. Realizarea unei liste (NU TABEL!) într-o foaie de calcul Excel

TITLU

Poezii

AUTOR

Mihai Eminescu

  •  2. Activarea opțiunii DEVELOPER în meniul Excel

 În File > Options > Customize Ribbon > se bifează (în partea dreaptă) Developer

  •  3. Crearea unui fișier XML pentru mapare

 Folosind un editor (XML COPY EDITOR sau altul), se scrie o structură XML pentru mapare  (salvare ca format .xml). Sunt necesare cel puțin două înregistrări (blocuri de date) în structură pentru a se genera fișierul XML.

<?xml version="1.0"?>
<BIBLIOTECA>
     <CARTE>
           <TITLU>Poezii</TITLU>
           <AUTOR>Mihai Eminescu</AUTOR>

     </CARTE>
     <CARTE>
           <TITLU>Jurnalul fericirii</TITLU>
           <AUTOR>N. Steinhardt</AUTOR>

     </CARTE>
</BIBLIOTECA>

  •  4. Încărcarea fișierului XML creat pentru mapare și maparea coloanelor din Excel

În meniul Excel: Developer > butonul Source > (în partea dreapta a ecranului se va deschide XML Source > XML Maps > Add > (se adaugă fișierul XML creat cu editorul) > se trage cu cursorul câmpurile din structura XML încărcate în dreapta spre titlurile coloanelor > se exportă fișierul Excel cu format XML Data (.xml).

* Dacă se adaugă noi titluri și autori în lista Excel, aceste date vor apărea în noul fișier exportat în format XML, care poate fi deschis cu editorul XML.

(despre  XAML la .NET)
 Bază de date
= un sistem organizat pentru stocarea, gestionarea și interogarea datelor.

SQL - bază de date relațională

PROGRAMARE PROCEDURALĂ (pas cu pas)
- pentru a realiza un cod, se folosesc secvențe de program organizate în unități distincte (proceduri sau funcții), independente și reutilizabile (modulare), fiecare rezolvând o anumită sarcină.
PROGRAMARE ORIENTATĂ PE OBIECTE
- variabilele sunt închise în obiecte
 Polimorfismul
= (din greacă: ”cu mai multe forme”), adică ”o singură interfață, mai multe metode” - permite existența unei interfețe care să fie cu acces la un grup generic de acțiuni
 Încapsularea
Mecanismul combină datele și codul prin care acestea sunt gestionate, păstrându-se integritatea lor față de influențe exterioare prin crearea unui OBIECT (în cadrul căruia, codul și datele pot fi private - sunt accesibile doar în cadrul aceluiași obiect - sau private - pot fi utilizate și din părți ale programului care există în afara respectivului obiect).
 Clasa (unitate fundamentală a încapsulării) = un șablon
(exemplu: clasa este categoria Mașină, iar obiectul este echivalent unei mărci, chiar model al unei mărci - Dacia Logan) = indică datele și codul care gestionează datele - un șablon care definește aspectul și comportamentul viitorului obiect (care este o instanță a clasei) - conțin MEMBRI: proprietăți (descriu atributele unui obiect - ASPECT), metode (descriu operațiile specifice pe care le poate efectua un obiect - COMPORTAMENT), câmpuri private (variabile vizibile în cadrul obiectului - VIZIBILITATE), constante, constructori (cu sau fără parametri - poartă numele clasei și sunt apelați pentru crearea unui nou obiect - CREARE), evenimente, tipuri încorporate
 Obiecte (fac parte dintr-o clasă - sunt instanțe ale unor clase) = un rezultat obținut cu șablonul 
(exemplu: din clasa mașină, obiectul este echivalentul unui model Dacia Logan 2008) - pot fi create mai multe instanțe ale aceleiași clase (mai multe obiecte în aceeași clasă, în același program); - aspectul unei instanțe poate fi diferit - exprimat prin aceleași proprietăți, dar cu valori diferite; - fiecare instanță are comportament identic, având aceleași metode și poate efectua aceleași acțiuni
 Moștenirea
= un obiect primește caracteristicile obiectului părinte
 Reutilizarea
= o clasă nou creată poate fi utilizată pentru a crea o mulține de noi alte obiecte

- limbaj de programare de nivel mediu (programare procedurală) 

Tipuri de date

DATA TYPES (succesiuni de biți - 0 sau 1, măsurate în octeți - BYTE, adică 8 biți) = zone/ bucăți din memoria RAM dedicate unei instrucțiuni) 

VARIABILE

VARIABILELE (pot fi imaginate ca niște cutii cu conținut variat) = zone/ bucăți din memoria RAM dedicate unei instrucțiuni) - șiruri alfanumerice, având un NUME și o VALOARE (sunt senzitive la litere mari sau mici, care, în acest limbaj, nu pot începe cu cifră, nu pot conține caractere speciale, nu pot fi separate prin spații (spațiul este înlocuit cu _)

Variabile scalare 

VARIABILE NUMERICE (int = număr fără virgulă și float = număr cu virgulă)

- funcțiile int () și float () se folosesc pentru a converti un șir într-un număr

VARIABILE DE TIP CARACTER (string)

(string înseamnă șir)

ATENȚIE LA CUVINTELE REZERVATE (CHEIE)! 
Este de preferat să se evite folosirea cuvintelor rezervate ca denumire de variabilă! - in - yield - nonlocal - assert - def = definește (folosit în structura funcțiilor, pentru a da nume funcției)

- funcția str () se poate folosi pentru a converti un număr într-un șir - str(number)

(nu se pot amesteca variabile numerice cu variabile de tip string, dar cele numerice se pot converti în string)

OPERATORI sunt folosiți pentru a da valori variabilelor

Structuri de date liniare

ȘIRURI (un tip de dată de bază format din caractere numerice)

(pentru editare de coduri, se pot folosi Code Blocks sau CLion)

C++ este un limbaj de nivel înalt, adică programare orientată pe obiecte)

 Structuri de date neliniare

GRAFURI

GRAF  = elementele unei mulțimi sau grup de obiecte/ set de puncte, adică NODURI, unite sau conectate, două câte două, prin MUCHII sau CURBE(pe baza unei relații).

GRAF NEORIENTAT (G) = o pereche ordonată de mulțimi de noduri (notate X - nodes) și de muchii (notate U - edges). LANȚ AL UNUI GRAF = o succesiune de vârfuri, unde oricare două vârfuri consecutive sunt adiacente. GRAF PARȚIAL AL UNUI GRAF INIȚIAL = un graf obținut prin eliminarea uneia sau mai multor muchii. SUBGRAF AL GRAFULUI INIȚIAL - un graf obținut prin eliminarea unor noduri șia muchiilor incidente lor. GRAF COMPLET = oricare două noduri sunt adiacente. CICLU ELEMENTAR = toate nodurile sunt diferite, cu excepția primului și ultimului. NODUL IZOLAT = are gradul 0. MATRICE DE ADIACENȚĂ a[i][j], unde 1 se notează dacă există muchie între i și j, (i,j aparține mulțimii de muchii U), iar 0 se notează daca nu există muchie între i și j (i, j nu aparține mulțimii de muchii U). LISTE DE VECINI = se notează nodurile vecine fiecărui nod

 

EXEMPLU
Harta - graf ponderat (fiecare muchie are asociată o valoare numită cost = lungime, capacitate etc.)
ARBORI (structuri arborescente)

ARBORE = colecție de noduri, unde fiecare nod are asociată o anumită informație și o colecție de descendenți (fii - nodul care urmează imediat sub nodul-părinte). Rădăcina unui arbore = un nod unic, care nu are părinte.

ARBORI BINARI = fiecare nod are maxim doi descendenți, știindu-se exact care este fiul stâng și fiul drept (nodurile fără fii sunt frontieră a arborelui).

 PYTHON - este un limbaj de nivel înalt, adică programare orientată pe obiecte

(pentru editarea liniilor de cod se poate folosi mediul de dezvoltare PyCharm - acesta permite navigarea prin proiect și cod, vizualăzări de specialitate ale codurilor, structurii fișierelor și salturi între fișiere, clase, metode)

Opțiuni din meniul Pycharm 
- RUN - rularea unui fișier

- este obligatorie identarea codului (tab)

comentariile în Python se notează cu #

Tipuri de date

VARIABILE

VARIABILELE (pot fi imaginate ca niște cutii cu conținut variat) = DATE/ DATA TYPES (succesiuni de biți - 0 sau 1, măsurate în octeți - BYTE, adică 8 biți) = zone/ bucăți din memoria RAM dedicate unei instrucțiuni) - șiruri alfanumerice, având un NUME și o VALOARE (sunt senzitive la litere mari sau mici, care, în acest limbaj, nu pot începe cu cifră, nu pot conține caractere speciale, nu pot fi separate prin spații (spațiul este înlocuit cu _)

Variabile scalare 

VARIABILE NUMERICE (int = număr fără virgulă și float = număr cu virgulă)

- funcțiile int () și float () se folosesc pentru a converti un șir într-un număr

VARIABILE DE TIP CARACTER (string)

(string înseamnă șir)

ATENȚIE LA CUVINTELE REZERVATE (CHEIE)! 
Este de preferat să se evite folosirea cuvintelor rezervate ca denumire de variabilă! - in - yield - nonlocal - assert - def = definește (folosit în structura funcțiilor, pentru a da nume funcției)

- funcția str () se poate folosi pentru a converti un număr într-un șir - str(number)

(nu se pot amesteca variabile numerice cu variabile de tip string, dar cele numerice se pot converti în string)

Refactorizarea Python 
include redenumirea, metoda de extragere, introducerea variabilei, introducerea constantei, mutarea în sus sau în jos etc.
OPERATORI

OPERATORI sunt folosiți pentru a da valori variabilelor

(în ordine de prioritate - operațiile în paranteze au prioritate)

ARITMETICI

** (exponent/ ridicarea la putere: x **y, de exemplu: 2 la puterea 6 - 2 ** 6)
* (înmulțire)
/ (împărțire)
// (împărțire întreagă)
% (modulorestul împărțirii)
+ (adunare: x+y)
- (scădere)
EXEMPLE
2**3**2=512;
(2**3)**2=64

LOGICI 

and (ȘI logic)
or (SAU logic)
not (NU logic)

DE ATRIBUIRE

= (operator de atribuire)
Funcția
este un bloc de cod, adică o grupare de mai multe comenzi/ instrucțiuni care pot da o valoare (pași comunicați procesorului sub formă de date - biți -, folosind un anumit spațiu în memoria RAM) = rezultă îndeplinirea unei sarcini când funcția este apelată. - Unii spun că o funcție bine scrisă ar trebui văzută în întregime dintr-o singură privire .
Structura funcției
Funcția începe întotdeauna cu: 1. PRIMA LINIE: - cuvântul-cheie def - urmează numele funcției - apoi o pereche de paranteze rotunde - linia trebuie să se încheie cu două puncte def myfunction () 2. CORPUL FUNCȚIEI - date intrare (linia care urmează după prima linie def) - instrucțiuni imbricate 3. AFIȘARE - print = date ieșire (se va pune între paranteze și ghilimele conținutul care trebuie afișat)
Funcția PRINT
- este o funcție încorporată în Python, care afișează datele introduse

DE COMPARARE

PRECEDENȚA OPERATORILOR

(majoritatea operatorilor sunt considerați ca nivel de importanță de la stânga la dreapta, cu excepția operatorului exponent)

OPERAȚII (adunare, scădere etc.)

(în ordine de prioritate - operațiile în paranteze au prioritate)

Structuri de date liniare

ȘIRURI

ȘIRURI (un tip de dată de bază format din caractere numerice încapsulate în formate ASCII, UNICODE -UTF 8 etc., încadrate printr-o pereche de apostrof sau ghilimele)

INDEXARE

- este asociat caracterelor din șir

[-1] (arată ultima poziție din șir)

SEGMENTARE

- este asociat caracterelor din șir

[::] (arată toate caracterele din șir)
[x::] (arată caracterele din șir de la poziția indicată până la final)
[::-1] (arată caracterele din șir în ordine inversă)
[::2] (arată pozițiile impare din șir)
[1::2] (arată pozițiile pare din șir)
[2::3] (arată pozițiile divizibile cu 3 din șir)
Concatenare (Concationation) 
= însumarea a două sau mai multe șiruri într-unul singur (+) sau o combinare de caractere și cifre/ calcul de cifre
Metodă
este un tip specific de funcție, dar acționează diferit
Metoda .replace(`x`, `y`)
- returnează șirul înlocuit cu noul șir de n ori
Metoda .upper()
- returnează șirul cu toate caracterele transformate în majuscule
Metoda .lower()
- returnează șirul cu toate caracterele transformate în minuscule
Funcția
este un bloc de cod, adică o grupare de mai multe comenzi/ instrucțiuni care pot da o valoare (pași comunicați procesorului sub formă de date - biți -, folosind un anumit spațiu în memoria RAM) = rezultă îndeplinirea unei sarcini când funcția este apelată. - Unii spun că o funcție bine scrisă ar trebui văzută în întregime dintr-o singură privire .
Funcția INPUT
- este o funcție încorporată în Python, care citește de la tastatură variabile - date de intrare (rezultatul funcției Input este un șir de caractere introduse de la tastatură, cuprinzând un mesaj)
LISTE

LISTE  - se pun între paranteze drepte, iar intre valori trebuie să fie virgule = este o colecție de elemente scalare

- tipurile de date cuprinse în liste pot fi diferite

Metodă
este un tip specific de funcție, dar acționează diferit
Metoda .count(x)
- returnează de câte ori apare elementul x din listă

INDEXARE

Funcția
este un bloc de cod, adică o grupare de mai multe comenzi/ instrucțiuni care pot da o valoare (pași comunicați procesorului sub formă de date - biți -, folosind un anumit spațiu în memoria RAM) = rezultă îndeplinirea unei sarcini când funcția este apelată. - Unii spun că o funcție bine scrisă ar trebui văzută în întregime dintr-o singură privire .
Funcția LEN
- returnează numărul de obiecte din listă (lungimea listei)
Structura funcției
Funcția începe întotdeauna cu: 1. PRIMA LINIE: - cuvântul-cheie def - urmează numele funcției - apoi o pereche de paranteze rotunde - linia trebuie să se încheie cu două puncte def myfunction () 2. CORPUL FUNCȚIEI - date intrare (linia care urmează după prima linie def) - instrucțiuni imbricate 3. AFIȘARE - print = date ieșire (se va pune între paranteze și ghilimele conținutul care trebuie afișat)

SEGMENTARE

IF

(execută o singură dată)

STRUCTURI REPETITIVE

BUCLĂ CU WHILE (repetă execuția atâta timp cât condiția evaluează cu TRUE)

BUCLĂ CU FOR (utilă pentru seturi mai de date)

Funcția RANGE
stochează exact o valoare dată la un moment dat
Funcția
este un bloc de cod, adică o grupare de mai multe comenzi/ instrucțiuni care pot da o valoare (pași comunicați procesorului sub formă de date - biți -, folosind un anumit spațiu în memoria RAM) = rezultă îndeplinirea unei sarcini când funcția este apelată. - Unii spun că o funcție bine scrisă ar trebui văzută în întregime dintr-o singură privire .

JAVA - este un limbaj de nivel înalt, adică programare orientată pe obiecte

.NET (framework - o structură predefinită, oferind instrumente și reguli  gratuit - open source, multiplatformă, pentru creare de aplicații și servicii cloud)

ARHITECTURA .NET FRAMEWORK (platforma Microsoft pentru dezvoltare de aplicații pentru Windows sau pentru Web)

 (ATENȚIE! * rulează numai cu Windows)

BASE CLASS LIBRARY (BCL)
= Biblioteca de clase cuprinde oferă un set de interfețe de programare și tipuri pentru funcționalități comune (citirea și scrierea fișierelor, conectarea la baze de date etc.)
COMMON LANGUAGE RUNTIME (CLR)
= motorul de execuție care controlează aplcațiile rulate (mediul de execuție al codului .NET, în care se gestionează memoria, accesul la resursele sistemului, securitatea resurselor și a codului executat).
Tehnologii destinate datelor (Data Tier) - ADO.NET, LINQ, XML
- pentru acces la date, interogarea datelor etc.
Tehnologii destinate comunicațiilor - WCF (Windows Communication Foundation), WF (Workflow Foundation)
Service Oriented Architecture - SOA
Tehnologii pentru interfețe grafice - GUI (Graphical User Interface): WinForms - proiecte de tip Windows Forms Application, WPF, ASP.NET, SilverLight
Service Oriented Architecture - SOA - proiectele construite folosind Windows Forms (WinForms) pot conține butoane, casete de text, etichete, liste, meniuri, ferestre etc.
Limbaje de programare: C#, F#, Visual Basic, altele - aplicațiile .NET sunt scrise în limbajele C#, F# sau Visual Basic
- rezultând fișiere cu extensia .dll sau .exe
ARHITECTURA .NET CORE (un framework destinat aplicațiilor pentru Windows, Linux, MacOS)

 (ATENȚIE! * rulează numai cu Windows)

Limbaje de programare: C#, F#, Visual Basic, XAML, TypeScript
- rezultând fișiere cu extensia .dll sau .exe
BASE CLASS LIBRARY (BCL)
= Biblioteca de clase cuprinde oferă un set de interfețe de programare și tipuri pentru funcționalități comune (citirea și scrierea fișierelor, conectarea la baze de date etc.)
VISUAL STUDIO (IDE - mediu integrat de dezvoltare a aplicațiilor software: scriere, editare, rulare, depanare, testare de coduri în diverse limbaje de programare - C#, C++, Python, JavaScript, TypeScript etc. și implementare de aplicații, cu asistență prin GitHub și inteligență arificială)
Indicații pentru instalare (versiunea 2022)
(este pe 64 biți) - la rularea Visual Studio Install - în meniu -WORKLOADS se bifează .NET desktop development; - la INDIVIDUAL COMPONENTS trebuie bifate: Class Designer; C# and Visual Basic Roslyn compilers; MSBuild; Text Template Transformation; SQL Server ODBC Driver; SQL Server Express 2019 LocalDB; Conectivity and publishing tools; SQL Server Command Line Utilities; SQL Server Data Tools; Data Sources for SQL Server support; Live Share; LINQ to SQL tools. - resetarea setărilor - meniu - Tools - Import and Export Settings - Reset all settings (se alege No...)

Fiecare PROIECT în Visual Studio generează un ANSAMBLU privat sau partajat (o unitate logică, având cod executabil - fișier cu extensia .exe și bibliotecă de clase - fișier cu extensia .dll), iar la crearea acestuia, numele devine și spațiul de nume/ NAMESPACE pentru toate clasele conținute (regiunile din codul clasei se pot extinde sau restrânge - o astfel de metodă a organizării codului are ca scop evitarea suprapunerii de nume folosite pentru clase și obiecte). METADATELE sunt informații care descriu tipurile și metodele existente în codul unui ansamblu).

C# (C sharp este un limbaj de nivel înalt, adică programare orientată pe obiecte - limbaj puternic tipizat, deci clasele sunt tipuri referință)

TERMENI FRECVENȚI:

 Clasa (unitate fundamentală a încapsulării; - în C#, clase sunt tipuri referință) - obiectele sunt parte dintr-o clasă 
(vezi anterior despre CLASĂ, la ”Programare orientată pe obiecte”) Exemplu. CLASS Persoana Proprietăți/ câmpuri: Nume; Prenume; DataNasterii; LoculNasterii; Domiciliul Metode: Persoana(); CalculeazăVarsta(); NumeComplet()
 Obiecte în C# (- fac parte dintr-o clasă - instanțe ale unor clase) se creează cu operatorul new și indicarea constructorului clasei 
(vezi anterior despre OBIECT, la ”Programare orientată pe obiecte”) - are rolul de a preciza un comportament - prin implementarea unei interfețe, o clasă își schimbă comportamentul conform unor obligații stabilite anterior; - clasa implementează o interfață (poate implementa mai multe interfețe, implementând toate metodele precizate în interfețe), apoi se vor crea obiecte din clasa respectivă, care vor avea funcționalități definite de interfață - nu conține cod, ci conține doar semnătura unor metode și proprietăți; - nu poate avea câmpuri private; (exemplu: din clasa mașină, obiectul este echivalentul unui model Dacia Logan 2008)
 Metodă (- arată ce fac elementele din clasă)
de exemplu: elevul învață
 Interfață (”un contract” cu clasele - se folosește în situații când se utilizează un set de metode care încapsulează funcționalități specifice) 
Exemplu. CLASS Persoana Proprietăți: Nume; Prenume; DataNasterii; LoculNasterii; Domiciliul Metode: Persoana(); CalculeazăVarsta(); NumeComplet()
 Modificatorii de acces în C# (stabilesc accesibilitatea obiectelor și a membrilor acestora - apar în codul clasei)
- public - private - protected - internal
 Directiva Using
- directivele Using nefolosite se vor șterge, iar cele rămase vor fi sortate alfabetic.
 Diagrama unei clase
Diagrama reprezintă componentele clasei (de exemplu: proprietăți publice, metode publice).
 Tablouri de date (Arrays) - Clasa ARRAY/ System.Array
= structuri de date care stochează mai multe valori de același tip CLASA ARRAY oferă metode pentru crearea, manipularea, căutarea și sortarea tablourilor de date - Proprietatea Rank arată numărul de dimensiuni al tabloului (1=tablou unidimensional, 2=tablou bidimensional, 3, 4...) - Proprietatea Length arată numărul total de elemente din tabloul de date, din toate dimensiunile. - Metoda GetValue(int, int) returnează dintr-un tablou bidimensional valoarea corespunzătoare celor 2 indecși int. * un array are marginea inferioară zero (adică indexul primului element), în mod implicit, dar se poate declara o altă margine inferioară.
 Colecții de obiecte - clasele din spațiul de nume System.Collections & Interfața ICollection (interfața IEnumerable) & exemple de colecții de obiecte (ArrayList, Hashtable, SortedList, Stack, Queue)
- (conceptul de colecție este superior celui de tablou de date) - pentru manipularea datelor similare numeroase - față de clasa Array, cu System.Collections sunt posibile operațiile de adăugarea, ștergerea, repoziționarea unui anumit element într-o colecție. - Metoda pentru ADĂUGAREA UNUI OBIECT sau a mai multor obiecte: metode Add/ AddRange. - Metoda pentru ȘTERGEREA UNUI OBIECT sau a mai multor obiecte: Remove/ RemoveAt/ RemoveRange. - Metoda pentru VERIFICAREA EXISTENȚEI UNUI OBIECT în colecție: Contains. - Metoda pentru REGĂSIREA ELEMENTELOR în colecție: IndexOf. - Metoda CopyTo pentru a copia elementele din colecție într-un tablou (array) unidimensional (ordinea în care sunt scrise elementele în noul array este dată de ordinea în care le returnează iteratorul, iar indexarea noului array începe cu zero) CARACTERISTICILE COLECȚIILOR CARE IMPLEMENTEAZĂ interfața ICOLLECTION: - interfața ICollection, implementată de colecțiile din .NET Framework, permite existența unui iterator (pointer care indică un element din colecție) care parcurge colecția (instrucțiunea Foreach și interogarea cu LINQ) * toate colecțiile indexate din spațiul de nume System.Collections au marginea inferioară zero, adică indexul primului element (engl. 0-indexed collections) - CAPACITATEA UNEI COLECȚII (numărul de elemente pe care-l poate conține la un moment dat) este o valoare ajustabilă când capacitatea curentă a fost atinsă (memoria este realocată, iar elementele sunt copiate din vechea colecție în cea nouă) EXEMPLE DE COLECȚII DE OBIECTE: - ArrayList - o mulțime de obiecte poate crește (prin adăugare de noi obiecte) - Hashtable - colecție care conține perechi Key/ Value pentru fiecare obiect stocat (fiecare obiect are o cheie unică) - SortedList - colecție care conține perechi Key/Value pentru fiecare obiect conținut. Obiectele sunt căutate după Key sau după index. Colecția operează cu noțiunea de „ordine a elementelor”. - Stack (stivă) - colecție de obiecte care poate crește după regula LIFO = Last In First Out. - Queue (coadă de așteptare) - colecție de obiecte care poate crește după regula FIFO = First In First Out.
 Colecții generice (doar pentru un tip de obiecte - cum ar fi doar produse) & exemple & membri ai clasei List< T >  
- colecții de obiecte dintr-un anumit tip (Type T), indicat explicit de la început; - stochează doar obiecte de tipul indicat în declarație (nu se acceptă simultan obiecte de diferite tipuri - ca în colecțiile ArrayList); - este necesară menționarea în cod a spațiului de nume System.Collections.Generic (se indică în directiva using). EXEMPLE: - List< T > - listă de obiecte de tip T; - HashSet< T > - set de obiecte de tip T; - Stack< T > - stivă de obiecte de tip T, poate crește după regula LIFO = Last In First Out.; - Queue< T > - coadă (de așteptare) de obiecte de tip T, poate crește după regula FIFO = First In First Out. - Dictionary< TKey, TValue > - colecţie de tip dicţionar, în care fiecare obiect de tip ; MEMBRI AI CLASEI List< T >: - int Count = proprietate care returnează numărul de elemente din colecţie; - void Add(T item) = metodă care adaugă la colecţie elementul indicat (item); - void Clear() = metodă care şterge toate elementele din colecţie; - bool Contains(T item) = metodă care verifică dacă elementul indicat (item) este conţinut în colecţie şi întoarce un rezultat logic, boolean (true / false); - int IndexOf(T item) = metodă care returnează indexul elementului indicat (item) în cadrul colecţiei (sau –1 dacă elementul nu este în colecţie); - void Insert(int index, T item) = metodă care inserează în colecţie elementul indicat (item) în poziţia indicată prin valoarea întreagă index; - bool Remove(T item) = metodă care şterge din colecţie elementul indicat (item) şi returnează true. Dacă elementul indicat nu există în colecţie, atunci metoda returnează false. - void RemoveAt(int index) = metodă care şterge din colecţie elementul cu indexul indicat
 Crearea unei aplicații cu C#
- orice aplicație creată cu C# necesită întâi crearea unui proiect și a unei soluții (în Solution Explorer sunt afișate fișierele acestora), apoi se editează codul funcției Main în fereastra Program.cs; - în PROPRIETĂȚI (Properties) se afișează elementele și controalele proiectului, care se pot modifica aici

(* Este hașurată cu galben structura minimă a unui program)

 Aplicația de tip Console
- rulează într-o fereastră de linie comandă (Console), afișând doar text, nu o interfață grafică
Realizarea aplicației HELLO WORLD cu Visual Studio (cu C#, pentru sistem Windows, aplicație de tip Console)
1. CREAREA UNUI PROIECT NOU DE TIP CONSOLE APP, pentru PLATFORMA .NET FRAMEWORK

CREATE A NEW PROJECT > se alege CONSOLE APP (.NET FRAMEWORK) > (în fereastra Configure your new project - Project Name: HELLO WORLD, - Solution Name: HELLO WORLD_CS)

În panoul SOLUTION EXPLORER (se află de obicei în dreapta ecranului) se afișează structura proiectului.

2. FUNCȚIA Main - punctul de început al execuției programului

În fereastra Program.cs, în cod s-a generat namespace HELLO WORLD.

SCRIEREA CODULUI: pentru instrucțiuni se folosesc: cuvinte-cheie ale limbajului de programare (class, static, string etc.), denumiri de clase (ex. Program, Console... - editorul oferă posibilitatea completării automate după scrierea primelor litere din cuvintele-cheie, datorită suportului IntelliSense), metode apelate (ex. WriteLine, ReadLine), variabile (ex. args = argumentele funcției Main), valori (șirul de caractere Hello World), alte elemente (//comentariu - este un element care nu este luat ]n considerare la rularea programului).

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace HELLO_WORLD

{

    internal class Program

    {

        private static object console;


        static void Main(string[] args)

        {

            Console.WriteLine("Hello, World!");  //comentariu

            Console.WriteLine("Press ENTER to exit...");

            Console.ReadLine();

        }

    }

}

Dacă se fac modificări în cod, este necesară o nouă compilare a proiectului sau a soluției din MENIU > BUILD (tasta F6)

3. COMPILAREA ȘI RULAREA PROGRAMULUI

În MENIU se alege DEBUG > START DEBUGGING (se va deschide o fereastră în care se afișează: Hello, World! Press ENTER to exit...

4. OPRIREA FORȚATĂ ȘI DEPANAREA PAS CU PAS A APLICAȚIEI

Pentru oprirea forțată se alege butonul STOP DEBUGGING. 

Depanarea pas cu pas se face folosind comenzile STEP INTO sau STEP OVER

INTEROGĂRI ALE COLECȚIILOR DE DATE (LINQ)

 LINQ (pentru interogare de date - lucru cu colecții, baze de date, fișiere XML)
(Language Integrated Query) = set de tehnologii care integrează capabilități de interogare a colecțiilor de date direct în limbajul de programare (model de programare care permite scrierea de instrucțiuni pentru manipularea datelor folosind o sintaxă unitară, expresivă și inteligibilă - face.operații asupra colecțiilor de date, interogări/ solicitări de date dintr-o colecție = queries făcute direct din limbajul de programare); - posibilitatea de a folosi instrucțiuni cu aceeași sintaxă chiar dacă sursele de date sunt foarte diferite: colecții de obiecte, baze de date SQL, documente XML (introduce șabloane standard pentru interogarea şi actualizarea datelor); - prin directiva using se indică spațiul de nume System.Linq. INTEROGĂRI LINQ (operații de bază): - indicarea sursei date - clauza from; - filtrarea datelor - clauza where; - ordonarea/ sortarea datelor = clauza orderby; - proiecția datelor = clauza select; - gruparea datelor = clauza group; - reunirea datelor = clauza join; - operații de setare a datelor.

 - folosește CUVINTE-CHEIE (inspirate din SQL): var (variabile care vor conține reyultate ale interogărilor LINQ), from, where, select etc.

 Tablouri de date (Arrays) - Clasa ARRAY/ System.Array
= structuri de date care stochează mai multe valori de același tip CLASA ARRAY oferă metode pentru crearea, manipularea, căutarea și sortarea tablourilor de date - Proprietatea Rank arată numărul de dimensiuni al tabloului (1=tablou unidimensional, 2=tablou bidimensional, 3, 4...) - Proprietatea Length arată numărul total de elemente din tabloul de date, din toate dimensiunile. - Metoda GetValue(int, int) returnează dintr-un tablou bidimensional valoarea corespunzătoare celor 2 indecși int. * un array are marginea inferioară zero (adică indexul primului element), în mod implicit, dar se poate declara o altă margine inferioară.
 Colecții de obiecte - clasele din spațiul de nume System.Collections & Interfața ICollection (interfața IEnumerable) & exemple de colecții de obiecte (ArrayList, Hashtable, SortedList, Stack, Queue)
- (conceptul de colecție este superior celui de tablou de date) - pentru manipularea datelor similare numeroase - față de clasa Array, cu System.Collections sunt posibile operațiile de adăugarea, ștergerea, repoziționarea unui anumit element într-o colecție. - Metoda pentru ADĂUGAREA UNUI OBIECT sau a mai multor obiecte: metode Add/ AddRange. - Metoda pentru ȘTERGEREA UNUI OBIECT sau a mai multor obiecte: Remove/ RemoveAt/ RemoveRange. - Metoda pentru VERIFICAREA EXISTENȚEI UNUI OBIECT în colecție: Contains. - Metoda pentru REGĂSIREA ELEMENTELOR în colecție: IndexOf. - Metoda CopyTo pentru a copia elementele din colecție într-un tablou (array) unidimensional (ordinea în care sunt scrise elementele în noul array este dată de ordinea în care le returnează iteratorul, iar indexarea noului array începe cu zero) CARACTERISTICILE COLECȚIILOR CARE IMPLEMENTEAZĂ interfața ICOLLECTION: - interfața ICollection, implementată de colecțiile din .NET Framework, permite existența unui iterator (pointer care indică un element din colecție) care parcurge colecția (instrucțiunea Foreach și interogarea cu LINQ) * toate colecțiile indexate din spațiul de nume System.Collections au marginea inferioară zero, adică indexul primului element (engl. 0-indexed collections) - CAPACITATEA UNEI COLECȚII (numărul de elemente pe care-l poate conține la un moment dat) este o valoare ajustabilă când capacitatea curentă a fost atinsă (memoria este realocată, iar elementele sunt copiate din vechea colecție în cea nouă) EXEMPLE DE COLECȚII DE OBIECTE: - ArrayList - o mulțime de obiecte poate crește (prin adăugare de noi obiecte) - Hashtable - colecție care conține perechi Key/ Value pentru fiecare obiect stocat (fiecare obiect are o cheie unică) - SortedList - colecție care conține perechi Key/Value pentru fiecare obiect conținut. Obiectele sunt căutate după Key sau după index. Colecția operează cu noțiunea de „ordine a elementelor”. - Stack (stivă) - colecție de obiecte care poate crește după regula LIFO = Last In First Out. - Queue (coadă de așteptare) - colecție de obiecte care poate crește după regula FIFO = First In First Out.
 Colecții generice (doar pentru un tip de obiecte - cum ar fi doar produse/ furnizori/ clienti etc.) & exemple & membri ai clasei List< T >  
- colecții de obiecte dintr-un anumit tip (Type T), indicat explicit de la început; - stochează doar obiecte de tipul indicat în declarație (nu se acceptă simultan obiecte de diferite tipuri - ca în colecțiile ArrayList); - este necesară menționarea în cod a spațiului de nume System.Collections.Generic (se indică în directiva using). EXEMPLE: - List< T > - listă de obiecte de tip T; - HashSet< T > - set de obiecte de tip T; - Stack< T > - stivă de obiecte de tip T, poate crește după regula LIFO = Last In First Out.; - Queue< T > - coadă (de așteptare) de obiecte de tip T, poate crește după regula FIFO = First In First Out. - Dictionary< TKey, TValue > - colecţie de tip dicţionar, în care fiecare obiect de tip ; MEMBRI AI CLASEI List< T >: - int Count = proprietate care returnează numărul de elemente din colecţie; - void Add(T item) = metodă care adaugă la colecţie elementul indicat (item); - void Clear() = metodă care şterge toate elementele din colecţie; - bool Contains(T item) = metodă care verifică dacă elementul indicat (item) este conţinut în colecţie şi întoarce un rezultat logic, boolean (true / false); - int IndexOf(T item) = metodă care returnează indexul elementului indicat (item) în cadrul colecţiei (sau –1 dacă elementul nu este în colecţie); - void Insert(int index, T item) = metodă care inserează în colecţie elementul indicat (item) în poziţia indicată prin valoarea întreagă index; - bool Remove(T item) = metodă care şterge din colecţie elementul indicat (item) şi returnează true. Dacă elementul indicat nu există în colecţie, atunci metoda returnează false. - void RemoveAt(int index) = metodă care şterge din colecţie elementul cu indexul indicat
1. CREAREA UNUI PROIECT (a unei aplicații)

CREATE NEW PROJECT (de ex. - de tip CLASS LIBRAY .NET Framework) - se definește numele proiectului (de ex. Clase).

2. CREAREA UNEI SOLUȚII

Codul programului conține instrucțiuni - cuprinzând cuvinte-cheie, denumiri de clase, de metode apelate, de variabile, valori introduse în cod, comentarii, alte elemente.

SOLUȚIE Visual Studio = un container cu unul sau mai multe proiecte (un folder care conține fișierul *.sln și câte un subfolder pentru fiecare proiect, bin și obj cu cod compilat - unul dintre proiecte de tip aplicație .exe este START UP - apare cu bold în panoul Solution Explorer).  Folderul soluției apare în C:\Users\UserName\source\repos

COMANDA BUILD SOLUTION în Visual Studio = determină crearea ansamblului EXE și a celui DLL (în folderul bin\Debug)

La pasul descris anterior (CREATE NEW PROJECT), în aceeași fereastră se completează și noua soluție - se definește numele soluției: Clase_CS.

În Solution Explorer se șterge Class1.cs.

3. ADĂUGAREA UNUI PROIECT LA O SOLUȚIE

În panoul SOLUTION EXPLORER (click dreapta) sau în meniu - FILE - ADD - NEW PROJECT, se pot adăuga alte proiecte la o soluție (de ex. - de tip CONSOLE APP .NET Framework, numit Obiecte, care se va seta ca Startup Project cu click dreapta, click Set as Startup Project - va fi evidențiat cu caractere îngroșate).

(Într-o soluție Visual Studio cu mai multe proiecte, unul dintre proiectele de tip aplicație EXE este PROIECT PRINCIPAL - STARTUP PROJECT - apare cu caractere îngroșate în panoul Solution Explorer.

Într-un proiect de tip Windows Forms Application, o fereastră este o clasă.

Codul programului principal - Program.cs din proiectul principal OBIECTE

(Codul conține apeluri către anumite metode)

În panoul SOLUTION EXPLORER (dublu click pe numele Program.cs din proiectul Obiecte pentru a deschide codul acesteia - este programul principal).

using System;

using Clase;

using System.Text;


namespace Obiecte

{

     class Program

    {

       static void Main(string[] args)  

             // PAS 1

             CreeazaObiecteDinClasaPersoana();


            // PAS 2

            CreeazaObiecteDinClasaStudent();


           // PAS 3

          TransmiteObiecteInApelulFunctiilor();


          Console.WriteLine(" \n\n Apasă ENTER pentru a termina programul." );

          Console.ReadLine();


// aici se termina programul principal

// urmează codul metodelor apelate

    }

        private static void CreeazaObiecteDinClasaPersoana() // metodă

        {

            string mesaj = "1. Rulează metoda CreeazaObiecteDinClasaPersoana()";

            Console.WriteLine("\n" +mesaj + "\n");


            // creare obiect pentru clasa Persoana si particularizare (varianta1) 

            Persoana p1 = new Persoana();

            p1.Nume = "Pop";

            p1.Prenume = "Ion";

            p1.AnNastere = 1990;


            // afisarea descrierii obiectului

            Console.WriteLine(p1.Descriere() + "\n");

        }


        private static void CreeazaObiecteDinClasaStudent() // metodă

        {

            string mesaj = "2. Rulează metoda CreeazaObiecteDinClasaStudent()";

            Console.WriteLine("\n" + mesaj + "\n");


            // creare obiect pentru clasa Student si particularizare (varianta1) 

            Student s1 = new Student();

            s1.Nume = "Pop";

            s1.Prenume = "Ion";

            s1.AnNastere = 1990;

            


            // afisarea descrierii obiectului

            Console.WriteLine(s1.Descriere() + "\n");

        }

        private static void TransmiteObiecteInApelulFunctiilor()

        {

        }


        private static void AfiseazaDetaliiDespreObiect(object param)

        {

        }


    }

}

Dacă se fac modificări în cod, este necesară o nouă compilare a proiectului sau a soluției din MENIU > BUILD (tasta F6)

 Obiecte (fac parte dintr-o clasă - sunt instanțe ale unor clase) 
- pot fi create mai multe instanțe ale aceleiași clase (mai multe obiecte în aceeași clasă, în același program); - aspectul unei instanțe poate fi diferit - exprimat prin aceleași proprietăți, dar cu valori diferite; - fiecare instanță are comportament identic, având aceleași metode și poate efectua aceleași acțiuni (exemplu: din clasa mașină, obiectul este echivalentul unui model Dacia Logan 2008)

CREAREA UNUI OBIECT se face în codul Program.cs (folosindu-se operatorul NEW și indicându-se constructorul clasei)

Proprietățile arată atributele obiectelor (aspectul). Metodele arată operațiile pe care le poate face un obiect (comportamentul). Constructorii sunt apelați pentru a crea noi obiecte. Câmpurile private sunt variabile care indică vizibilitatea.

4. STABILIREA UNEI REFERINȚE în proiectul OBIECTE către proiectul CLASE 

În panoul SOLUTION EXPLORER, click dreapta pe proiectul OBIECTE - ADD - REFERENCE - PROJECTS - se bifează CLASE

5. ADĂUGAREA UNUI FIȘIER NOU ÎNTR-UN PROIECT / CREAREA UNEI CLASE
 Clasa (unitate fundamentală a încapsulării; - în C#, clase sunt tipuri referință) - obiectele (PERSOANA1, PERSOANA2 etc.) sunt parte dintr-o clasă
(vezi anterior despre CLASĂ, la ”Programare orientată pe obiecte”) Exemplu. CLASS Persoana Proprietăți: Nume; Prenume; DataNasterii; LoculNasterii; Domiciliul Metode: NumeComplet(); CalculeazăVarsta(); Descriere()

În panoul SOLUTION EXPLORER (click dreapta) sau în meniu - PROJECT - ADD - NEW ITEM - CLASS (se poate redenumi cu click dreapta pe clasa nou creată - RENAME - de exemplu, PERSOANA)

CODUL UNEI CLASEI și adăugarea proprietăților în codul clasei PERSOANA

(Proprietățile descriu atributele unui obiect - ASPECTUL)

În panoul SOLUTION EXPLORER (dublu click pe numele clasei pentru a deschide codul acesteia).

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace Clase

{ // Crearea clasei

    public class Persoana

    {

        // Proprietățile publice ale clasei

       public string Nume { get; set; }

       public string Prenume { get; set; }

       public int AnNastere { get; set; }

       public string LocNastere { get; set; }

       public string Domiciliu { get; set; }   

     }

}

Dacă se fac modificări în cod, este necesară o nouă compilare a proiectului sau a soluției din MENIU > BUILD (tasta F6)

Adăugarea câmpurilor private în codul clasei PERSOANA

(Câmpurile private sunt variabile vizibile în cadrul obiectului - VIZIBILITATE)

// Campurile private ale clasei

private int anCurent;

Adăugarea constructorului în codul clasei PERSOANA

(Constructorul poartă numele clasei și este apelat pentru crearea unui nou obiect - CREARE)

        // Constructorul clasei

       public Persoana(string nume, int anNastere)     

{
   Nume = nume;
    AnNastere = anNastere;
}

      {

            Console.WriteLine("a fost apelat constructorul clasei...");

      }   

Crearea de obiecte
class Program
    {
        static void Main(string[] args)
        {
        Produs p1 = new Produs("Ac", 1);
        Console.WriteLine(p1.Denumire + " - " + p1.Pret + " lei");
        }
    }

 Metodă în C# (definește acțiunea făcută de un obiect)
- o funcție dintr-o clasă (realizează o acțiune); - are 4 puncte: 1. modificator de acces (public, privat sau protected, internal); 2. tip returnat: void (nu returnează nimic), int, string, bool etc.; 3. numele metodei (prima literă să fie majusculă); 4. parametrii (opțional)
Adăugarea metodelor publice în codul clasei PERSOANA

(Metodele descriu operațiile specifice pe care le poate efectua un obiect - COMPORTAMENT)

//Metodele publice ale clasei

public string NumeComplet()

{

    string numeComplet;

    numeComplet = $"{Nume} {Prenume}";

    return numeComplet;

}

public int Varsta()

{

     anCurent = DateTime.Now.Year;

     return anCurent - AnNastere;}

}

public string Descriere()

{

      string descriere;

     descriere = $"PERSOANA {Nume} {Prenume}, " + $"anul nasterii {AnNastere}";

      return descriere;

}   

Codul CLASEI DERIVATĂ (clasa STUDENT derivată din clasa PERSOANA)

(Studentul este o Persoană, deci preia toate proprietățile și metodele clasei Persoana)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace Clase

{

    public class Student : Persoana

    {

        // Proprietatile publice ale clasei:

        public int AnAdmitere { get; set; }


        // Constructorul clasei

        public Student()

        {

            Console.WriteLine(”a fost apelat constructorul clasei...”);

        }


        // Metodele publice ale clasei

        public string Descriere()

        {

            string descriere;

            descriere = $"STUDENT {Nume} {Prenume}, " + $"anul nasterii: {AnNastere}, anul admiterii {AnAdmitere}";

            return descriere;

        }

    }


6.  CREAREA DIAGRAMEI CLASEI

 - necesită instalarea instrumentului CLASS DESIGNER

 Diagrama unei clase
Diagrama reprezintă componentele clasei (de exemplu: proprietăți publice, metode publice). Exemplu: UML - diagramă de clasă

În panoul SOLUTION EXPLORER (click dreapta pe proiect - CLASE) sau în meniu - PROJECT - ADD - NEW ITEM - CLASS DIAGRAM 

 Colecții generice (doar pentru un tip de obiecte - cum ar fi doar produse/ furnizori/ clienti etc.) & exemple & membri ai clasei List< T >  
- colecții de obiecte dintr-un anumit tip (Type T), indicat explicit de la început; - stochează doar obiecte de tipul indicat în declarație (nu se acceptă simultan obiecte de diferite tipuri - ca în colecțiile ArrayList); - este necesară menționarea în cod a spațiului de nume System.Collections.Generic (se indică în directiva using). EXEMPLE: - List< T > - listă de obiecte de tip T; - HashSet< T > - set de obiecte de tip T; - Stack< T > - stivă de obiecte de tip T, poate crește după regula LIFO = Last In First Out.; - Queue< T > - coadă (de așteptare) de obiecte de tip T, poate crește după regula FIFO = First In First Out. - Dictionary< TKey, TValue > - colecţie de tip dicţionar, în care fiecare obiect de tip ; MEMBRI AI CLASEI List< T >: - int Count = proprietate care returnează numărul de elemente din colecţie; - void Add(T item) = metodă care adaugă la colecţie elementul indicat (item); - void Clear() = metodă care şterge toate elementele din colecţie; - bool Contains(T item) = metodă care verifică dacă elementul indicat (item) este conţinut în colecţie şi întoarce un rezultat logic, boolean (true / false); - int IndexOf(T item) = metodă care returnează indexul elementului indicat (item) în cadrul colecţiei (sau –1 dacă elementul nu este în colecţie); - void Insert(int index, T item) = metodă care inserează în colecţie elementul indicat (item) în poziţia indicată prin valoarea întreagă index; - bool Remove(T item) = metodă care şterge din colecţie elementul indicat (item) şi returnează true. Dacă elementul indicat nu există în colecţie, atunci metoda returnează false. - void RemoveAt(int index) = metodă care şterge din colecţie elementul cu indexul indicat
 Constructorul clasei 
- metodă specială care se execută automat atunci când este creat un obiect al acelei clase, așadar inițializează obiectul (valorile câmpurilor, proprietăților etc.).
Proiect Date în colecții generice obținute din ansamblul DataLayer.dll

(Datele furnizate de ansamblul DataLayer.dll, stocate în colecții generice, sunt prelucrate cu interogări LINQ - filtrare, sortare, grupare)

 LINQ (pentru interogare de date - lucru cu colecții, baze de date, fișiere XML)
(Language Integrated Query) = set de tehnologii care integrează capabilități de interogare a colecțiilor de date direct în limbajul de programare (model de programare care permite scrierea de instrucțiuni pentru manipularea datelor folosind o sintaxă unitară, expresivă și inteligibilă - face.operații asupra colecțiilor de date, interogări/ solicitări de date dintr-o colecție = queries făcute direct din limbajul de programare); - posibilitatea de a folosi instrucțiuni cu aceeași sintaxă chiar dacă sursele de date sunt foarte diferite: colecții de obiecte, baze de date SQL, documente XML (introduce șabloane standard pentru interogarea şi actualizarea datelor); - prin directiva using se indică spațiul de nume System.Linq. INTEROGĂRI LINQ (operații de bază): - indicarea sursei date - clauza from; - filtrarea datelor - clauza where; - ordonarea/ sortarea datelor = clauza orderby; - proiecția datelor = clauza select; - gruparea datelor = clauza group; - reunirea datelor = clauza join; - operații de setare a datelor.
 DataLayer.dll (stratul de acces la date în aplicație, conectare la bază de date - Data Layer)
= o bibliotecă Class Library
1. CREAREA (ADĂUGAREA LA UN PROIECT ANTERIOR) UNUI PROIECT de tip Class Library (.NET Framework)

CREATE NEW PROJECT (de ex. - de tip CLASS LIBRAY .NET Framework) - se definește numele proiectului (DataLayer).

ADĂUGAREA LA UN PROIECT A UNUI ANSAMBLU .DLL: în File Explorer - copy pentru fișierul .dll > în Solution Explorer - click dreapta pe numele proiectului - Paste - setări în Properties: Build action > None, Copy to Output Directory > Copy if newer. 

2. STABILIREA UNEI REFERINȚE în Startup Project către proiectul DataLayer

În panoul SOLUTION EXPLORER, click dreapta pe proiectul principal - ADD - REFERENCE - PROJECTS - se bifează DataLayer (în proiectul principal va apărea - la References - Data Layer)

3. EDITAREA CODULUI CLASEI Partener.cs (din DataLayer) - proprietățile clasei, constructor  - adăugare obiecte

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace DataLayer

{

    public class Partener

    {

        public int ID { get; set; }

        public string Nume { get; set; }

        public int CodFiscal { get; set; }

        public string Localitate { get; set; }

        public string Descriere

        {

            get { return $"{Nume}, {Localitate}"; }

        }


        // constructor Implicit

        public Partener()

        {

        }


        // constructor Specialist

        public Partener(int id, string nume, int codFiscal,

                       string localitate)

        {

            this.ID = id;

            this.Nume = nume;

            this.CodFiscal = codFiscal;

            this.Localitate = localitate;

        }

    }

}

4. ADĂUGAREA CLASEI DataRepository.cs (în DataLayer) 

În panoul SOLUTION EXPLORER (click dreapta) sau în meniu - PROJECT - ADD - NEW ITEM - CLASS (se poate redenumi cu click dreapta pe clasa nou creată - RENAME)

using System.Collections.Generic;


namespace DataLayer

{

    public static class DataRepository

    {

        public static List<Partener> GetTotiPartenerii()

        {

            return new List<Partener>

            {

                new Partener(1, "Partener A", 123, "Bucuresti"),

                new Partener(2, "Partener B", 456, "Cluj"),

                new Partener(3, "Partener C", 789, "Bucuresti")

            };

        }

    }

}

5. ADĂUGAREA UNEI FERESTRE/ PAGINI în proiectul principal pentru afișarea datelor 

ADĂUGAREA UNEI PAGINI NOI LA PROIECT: În panoul SOLUTION EXPLORER (din dreapta ecranului), click dreapta pe numele proiectului > Add > Page (WPF) > redenumirea acesteia PAGEDATA

Codul pentru PAGEDATA.xaml

<Page x:Class="HelloWorldWPF.PageData"

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      xmlns:local="clr-namespace:HelloWorldWPF"

      mc:Ignorable="d" 

      d:DesignHeight="550" d:DesignWidth="900"

      Title="PageData">


    <Grid Style="{DynamicResource GridStyleHello}" Background="Ivory">

        <StackPanel Margin="10">


            <Button Content="Afiseaza toti partenerii"

            Click="BtnToti_Click"

            Margin="0,0,0,5"/>


            <StackPanel Orientation="Horizontal">

                <TextBox x:Name="txtLocalitate" Width="150" Margin="0,0,5,0"/>

                <Button Content="Cauta dupa localitate"

                Click="BtnLocalitate_Click"/>

            </StackPanel>


            <ListBox x:Name="lstParteneri"

         Margin="0,10,0,0"/>

        </StackPanel>

    </Grid>

</Page>

Codul pentru PAGEDATA.xaml.cs

using DataLayer;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;


namespace HelloWorldWPF

{

    /// <summary>

    /// Interaction logic for PageData.xaml

    /// </summary>

    public partial class PageData : Page

    {

        public PageData()

        {

            InitializeComponent();

        } 


    private void BtnToti_Click(object sender, RoutedEventArgs e)

        {

            lstParteneri.Items.Clear();


            foreach (var p in DataRepository.GetTotiPartenerii())

            {

                lstParteneri.Items.Add(p.Descriere);

            }

        }


        private void BtnLocalitate_Click(object sender, RoutedEventArgs e)

        {

            lstParteneri.Items.Clear();


            // LINQ aplicat pe colecția de date, NU pe ListBox

            var parteneriDinLocalitate = DataRepository

                .GetTotiPartenerii();


            foreach (var p in parteneriDinLocalitate)

            {

                lstParteneri.Items.Add(p.Descriere);

            }

        }

    }

}

6. ADĂUGAREA UNEI TRIMITERI CĂTRE PAGEDATA din altă fereastra/ pagină

În codul .xaml se adaugă - text box cu text link

<TextBlock 

    Grid.Row="2"

    Foreground="Blue"

    Cursor="Hand"

    TextWrapping="Wrap"

    MouseLeftButtonUp="buttonLink_Click">

    Exemplu date organizate în colecții generice obținute din ansamblul DataLayer.dll

</TextBlock>

În codul .xaml.cs se adaugă

private void buttonLink_Click(object sender, RoutedEventArgs e)

{

    this.Content = new PageData();

}

 DataGrid - un control folosit pentru a afișa date în mod tabelar
- se pot afișa date din List ; - rezultate din baze de date; - date din fișiere
Afișarea unei colecții generice de obiecte folosind controlul DataGrid

(obținerea unui context de date care conține o colecție de obiecte Produse)

1. ADĂUGAREA UNUI PROIECT de tip Class Library (.NET Framework) ȘI ADĂUGAREA UNEI REFERINȚE

CREATE NEW PROJECT (de ex. - de tip CLASS LIBRAY .NET Framework) - se definește numele proiectului (DataLayer).

În panoul SOLUTION EXPLORER, click dreapta pe proiectul principal - ADD - REFERENCE - PROJECTS - se bifează DataLayer (în proiectul principal va apărea - la References - Data Layer)

2.  CREAREA CLASEI CU ROL DE DATA CONTEXT DIAGRAMEI CLASEI
 DataContext
- obiect-sursă de date (controalele primesc indicații automat de unde să ia date)

În panoul SOLUTION EXPLORER (click dreapta) sau în meniu - PROJECT - ADD - NEW ITEM - CLASS (se poate redenumi cu click dreapta pe clasa nou creată - RENAME - DATACONTEXT) - clasa cu rol de DataContext poate fi Program.cs - se adaugă în codul clasei:

class Program

    {

    static DataContext context; //denumirea contextului in date


    static void Main(string[] args)

    {


    // se creează contextul de date

        context = new DataContext();


    // se încarcă datele

        context.LoadData();


        //folosire date

        foreach (var produs in context.Produse)

        {

              Console.WriteLine($"{produs.Denumire} - {produs.Pret} lei");

        }

    }


3.  DIAGRAMA CLASELOR

În panoul SOLUTION EXPLORER (click dreapta pe proiect - CLASE) sau în meniu - PROJECT - ADD - NEW ITEM - CLASS DIAGRAM 

WPF (Windows Presentation Foundation - aplicații n-tier sau multi-layer, care sunt client desktop, cu un cadru UI - interfață utilizator) - această platformă/ mediu de dezvoltare se bazează pe un set larg de caracteristici: 

APLICAȚII N-TIER (MULTYLAYER)

Presentation Layer (ferestre, pagini, controale): - afișarea datelor; - afișarea comenzilor; - ferestre/ casete de dialog; - introducerea/ modificarea datelor; - notificări etc.

 - după ce se încarcă toate elementele apare Window Loaded (eveniment)

Business Logic Layer (prelucrarea datelor): - selectarea datelor necesare; - operații specifice aplicației.

Data Layer: - definire tipuri de date (Data Models); - colecții de date (Context, Repository); - acces la date externe (fișiere locale, fișiere la distanță, servere de baze de date cu SQL, servicii web prin http)

- o FEREASTRĂ WPF sau o PAGINĂ este descrisă (definită) prin 2 fișiere - unul cu cod XAML (care descrie interfața - conținutul și aspectul - prin toate elementele, cu atribute și prin stiluri) și unul cu cod C# (în spate - Code Behind) - care descrie ce se face în fereastră (comportamentul ferestrei/ al componentelor vizuale) prin gestionarea metodelor (funcțiilor) și evenimentelor.

XAML - (eXtensible Application Markup Language) limbaj de marcare specializat, creat de Microsoft ca variantă la XML, pentru descrierea (și editarea facilă) unei interfețe grafice (UI).

 Metodă în C# (definește acțiunea făcută de un obiect)
- o funcție dintr-o clasă (realizează o acțiune); - are 4 puncte: 1. modificator de acces (public, privat sau protected, internal); 2. tip returnat: void (nu returnează nimic), int, string, bool etc.; 3. numele metodei (prima literă să fie majusculă); 4. parametrii (opțional)

 WINDOW - fereastra principală sau secundară a aplicației

- container de nivel superior, fereastra principală găzduind aplicația, iar o fereastră secundară poate conține informații despre aplicație, de exemplu;

- are bară de titlu, butoane Minimize/ Maximize;

- conține orice control - dialoguri (Login etc.);

- când se închide fereastra, se închide aplicația.

Stil de fereastră
1. DEFINIREA STILULUI în Window.Resources

Înainte de a defini Grid (sau alt panou), se va scrie elementul XAML <Window.Resources> pentru stabilirea proprietăților unui stil.

<!-- Definirea stilului -->

<Window.Resources>

    <Style TargetType="Border" x:Key="RoundedBorderStyle">

        <Setter Property="CornerRadius" Value="10 10 10 10" />

    </Style>


    <Style TargetType="Button" x:Key="RoundedButtonStyle">

        <Setter Property="Background" Value="DarkBlue"/>

        <Setter Property="Foreground" Value="White"/>

        <Setter Property="FontSize" Value="14"/>

        <Setter Property="Height" Value="30"/>

        <Style.Resources>

            <Style TargetType="Border" BasedOn="{StaticResource RoundedBorderStyle}"/>

        </Style.Resources>

    </Style>

</Window.Resources>

 Grid (panou pentru aspect recomandat pentru ferestre, pagini etc.) 
= aspect al unui container organizat în coloane și rânduri (ca într-un tabel), util pentru gestiona cu exactitate conținutul
 Grid.ColumnDefinitions 
= împărțirea panoului în coloane - este definit modul în care spațiul este împărțit pe orizontală (fără ColumnDefinitions, Grid are o singură coloană); (* - indică spațiu flexibil, deci coloana umple spațiul în mod automat, în funcție de redimensionarea ferestrei); Grid.Column="0" - arată că elementul este plasat în prima coloană; - Grid.ColumnSpan="2" - inseamnă că elementul ocupă 2 coloane
 Grid.RowDefinitions 
= împărțirea panoului în rânduri - este definit modul în care spațiul este împărțit pe verticală (fără RowDefinitions, Grid are un singur rând); Grid.Row="0" - arată că elementul este plasat în primul rând;
 Stack Panel (panou pentru aspect pentru controale unul după altul)
= aspect al unui container în care controalele se aliniază UNUL DUPĂ ALTUL, orizontal sau vertical (implicit), fiind util pentru meniuri, de exemplu
CREAREA UNUI BUTON CU XAML (și setarea unor proprietăți)
< Button x:Name="myButton" Height="50" Width="100" Content="WPF ! " FontSize="20" Foreground="Yellow" Background="Green" />

CREAREA UNUI BUTON CU C# (și setarea unor proprietăți)
Button myButton = new Button();
myButton.Height = 50;
myButton.Width = 100;
myButton.FontSize = 20;
myButton.Content = "WPF !";
myButton.Foreground = new
SolidColorBrush(Colors.Yellow);
myButton.Background = new
SolidColorBrush(Colors.Green);

 Element XAML
= instanță a unui obiect sau control într-o aplicație - sunt folosite pentru a se crea instanțe de obiecte din clasele definite de cadrul aplicației, cum ar fi controale UI (exemple de elemente XAML: Button, TextBox etc.) sau pentru a descrie o structură ierarhică a interfeței
< Button Height="50" Width="320" Content="WPF ! " FontSize="20"
    Foreground="Yellow" >
    <Button.Background>
        <LinearGradientBrush>
            <GradientStop Color="DarkGreen" Offset="0"/>
            <GradientStop Color="LightGreen" Offset="1"/>
        </LinearGradientBrush>
    </Button.Background>
</Button> 
 Atribute XAML
= o proprietate a unui element XAML, folosită pentru a configura comportamentul, aspectul sau alte caracteristici ale acelui element - sunt folosite pentru a stabili valori pentru proprietăți ale obiectului
< Button Height="50" Width="100" Content="WPF ! " FontSize="20"
Foreground="Yellow" Background="Green" />

 FRAME (cadru/ container de navigare) - conținut navigabil în fereastră

- container folosit pentru a conține pagini, permițând navigarea între ele (înainte de Frame, în fereastră sau pagină se poate adăuga un meniu fix.

 PAGINA 1

 Controale WPF (componente vizuale)

- control LABEL (etichetă pentru alt control - folosită pentru a afișa într-un TextBox text static, care nu poate fi modificat de utilizator)

- control TEXTBLOCK - cadru unde se afișează text care nu poate fi modificat de utilizator

 Creare text cu link către pagină externă pe internet
În fișierul XAML: PROIECT ROSFERA (exemplu link spre o pagină pe Internet) în fișierul xaml.cs - link spre o pagină pe internet: private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; }
 Creare text cu link către pagină pe internet
În fișierul XAML: PROIECT ROSFERA (exemplu link spre o pagină pe Internet) în fișierul xaml.cs - link spre o pagină pe internet: private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; }

- control TEXTBOX - chenar unde utilizatorul poate completa cu text

- control BUTTON - buton cu care se poate realiza o acțiune

 PAGINA 2

 Folosirea stilurilor în WPF 

- definirea unui stil pentru un buton cu colțuri rotunjite, de exemplu, va fi utilă pentru a nu repeta scrierea proprietăților pentru alte butoane de același tip (pentru colțuri rotunjite este necesar un ControlTemplate, nu este suficient cu stil simplu)

- Control.Resources - stilul se folosește doar pentru un singur control;

- Window.Resources - stilul se folosește doar pentru o fereastră (de exemplu, pentru toate butoanele din fereastră);

- App.xaml - stilul se folosește în întreaga aplicație (de exemplu, pentru toate butoanele din aplicație)

Stil de pagină
1. DEFINIREA STILULUI în Page.Resources

Înainte de a defini Grid (sau alt panou), se va scrie elementul XAML <Page.Resources> pentru stabilirea proprietăților unui stil.

    <Page.Resources>


        <Style x:Key="PageTitleStyle" TargetType="TextBlock">

            <Setter Property="FontSize" Value="24"/>

            <Setter Property="FontWeight" Value="Bold"/>

            <Setter Property="Foreground" Value="DarkBlue"/>

            <Setter Property="HorizontalAlignment" Value="Center"/>

            <Setter Property="Margin" Value="0,10"/>

        </Style>


        <Style x:Key="MenuButtonStyle" TargetType="Button">

            <Setter Property="Background" Value="DarkSlateBlue"/>

            <Setter Property="Foreground" Value="White"/>

            <Setter Property="Margin" Value="5"/>

            <Setter Property="Padding" Value="10,5"/>

            <Setter Property="Width" Value="150"/>

        </Style>


    </Page.Resources>

APLICAREA  STILULUI ȘI ROTUNJIREA COLȚURILOR UNUI BUTON

În interiorul panoului Grid (sau alt panou), în descrierea butonului deja existent se va adăuga:

Style="{StaticResource RoundedButtonStyle}"/>

Sau click dreapta pe buton existent sau nou adăugat, Edit Template > Apply Resource > RoundedButtonStyle

 Crearea unei aplicații WPF cu C#
(configurare IDE - la lansarea Visual Studio, în ferestra de pornire, se poate selecta ”Continuați fără cod” - se deschide mediul de dezvoltare, cu instrumente, meniuri și fereastra principală) sau ”Create a new project” - pentru language, se va selecta WPF App (.NET Framework) - orice aplicație creată cu C# necesită întâi crearea unui proiect și a unei soluții (în Solution Explorer sunt afișate fișierele acestora); - în PROPRIETĂȚI (Properties) se afișează elementele și controalele proiectului, care se pot modifica aici; - INTERFAȚA CU UTILIZATORUL (UI - cu WPF) - adăugarea de componente/ controale (butoane, texte etc.) în fereastra principală - editarea CODULUI
 Metoda event handler (pentru evenimente cum ar fi click pe buton și nu numai - pentru apel către alte ferestre)
- reacționează la o acțiune a utilizatorului sau la un eveniment al sistemului
Realizarea proiectului HELLO, WORLD cu Visual Studio (cu C#, pentru sistem Windows, aplicație de tip WPF)
1. CREAREA UNUI PROIECT NOU DE TIP WPF pentru PLATFORMA .NET FRAMEWORK

CREATE A NEW PROJECT > se alege WPF APP (.NET FRAMEWORK) > (în fereastra Configure your new project - Project Name: HelloWorldWPF, - Solution Name: HelloWorldWPF_CS)

În panoul SOLUTION EXPLORER (se află de obicei în dreapta ecranului) se afișează structura proiectului.

2. PROIECTAREA INTERFEȚEI CU UTILIZATORUL (UI)/ ADĂUGAREA DE COMPONENTE (controale) ÎN FEREASTRA PRINCIPALĂ (ASPECTUL FERESTREI PRINCIPALE)

În fereastra principală, care se editează, cu aspect grafic de pagină/ tablă albă (Designer - Main Window) se pot adăuga componente/ controale fie prin scrierea directă a codului XAML, fie prin tragerea din panoul Tool Box (care va apărea în partea stângă a ecranului prin activare din Meniu > View > Toolbox) - sub fereastră se văd opțiunile (secțiunile) Design sau XAML (pentru editarea codului/ personalizarea controalelor) - numele controalelor se pot modifica din Proprietăți

- textBlockHello

- textBoxUsername

- buttonSayHello

În vizualizarea (marcajul) XAML va apărea (MainWindow.xaml):

<Window x:Class="HelloWorldWPF.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

xmlns:local="clr-namespace:HelloWorldWPF"

mc:Ignorable="d"

WindowStartupLocation="CenterScreen"

MinHeight="260" MinWidth="380"

Height="320" Width="520"

Title="Hello, World!" >

    <Grid Background="Ivory">

        <TextBlock x:Name="textBlockHello"

        Background="Khaki"

        Margin="140,90,0,0"

        VerticalAlignment="Top" HorizontalAlignment="Left"

        TextWrapping="Wrap"

        Text="Hello, World!" FontSize="36" TextAlignment="Center" />


        <TextBox x:Name="textBoxUsername"

        Margin="140,154,0,0"

        VerticalAlignment="Top" HorizontalAlignment="Left"

        Width="210" Height="30"

        IsTabStop="True" TabIndex="1"

        TextWrapping="Wrap"

        Text="" FontSize="10" Foreground="Gray" TextChanged="textBoxUsername_TextChanged" />


        <Button x:Name="buttonSayHello"

        Background="WhiteSmoke"

        Margin="140,194,0,0"

        VerticalAlignment="Top" HorizontalAlignment="Left"

        Width="210" Height="40" 

        IsTabStop="True" TabIndex="2"

        Click="buttonSayHello_Click"

        Content="Scrie numele pentru a primi salut"

        FontSize="14" />

   </Grid>

</Window>

SELECTAREA IMPLICITĂ A UNUI BUTON (un buton dintre mai multe este activat implicit) - în secțiunea XAML de sub (Designer), pentru HelloButton, de exemplu, se adaugă atributul IsCheked, setat cu True (adică: IsChecked="True").

3. EDITAREA CODULUI C# (code behind - determină evenimentele din fereastră) în MainWindow.xaml.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;


namespace HelloWorldWPF

{

    /// <summary>

    /// Interaction logic for MainWindow.xaml

    /// </summary>

    public partial class MainWindow : Window


    // constructorul implicit al clasei

    {

        public MainWindow()

        {

            InitializeComponent();


            // se setează primul control selectat

            textBoxUsername.Focus();

        }


        // METODE PRIVATE AJUTĂTOARE

        private void SayHello()

        {

           

           string username = textBoxUsername.Text.Trim();

            if (string.IsNullOrEmpty(username))

                {

                username = "World";

                }

            string message = $"Hello, {username}!";

            string caption = "Hello...";

            MessageBox.Show(message, caption,

                MessageBoxButton.OK,

                MessageBoxImage.Information);

            textBlockHello.Text = message;

        }


        // EVENIMENTE

        private void buttonSayHello_Click(object sender, RoutedEventArgs e)

        {

            SayHello();

        }

       private void textBoxUsername_TextChanged(object sender, TextChangedEventArgs e)

       {

       }   
   }

}

4. COMPILAREA ȘI RULAREA PROGRAMULUI

În MENIU se alege DEBUG > START DEBUGGING (se va deschide o fereastră în care se afișează: Hello, World! Press ENTER to exit...

5. OPRIREA FORȚATĂ ȘI DEPANAREA PAS CU PAS A APLICAȚIEI

Pentru oprirea forțată se alege butonul STOP DEBUGGING. 

Depanarea pas cu pas se face folosind comenzile STEP INTO sau STEP OVER

 -* cu proprietatea TextWrapping="Wrap" un control text trece textul pe rândul următor când nu încape pe un rând (nu este valabil la controlul Label!)

Adăugarea unei ferestre la un proiect WPF App, cu buton către aceasta din fereastra principală (folosire Frame)

ADĂUGAREA UNEI FERESTRE NOI LA PROIECT: În panoul SOLUTION EXPLORER (din dreapta ecranului), click dreapta pe numele proiectului > Add > Window (WPF) > redenumirea acesteia Window_Informatii

În fereastra principală, se adaugă - din Tool Box - un panou StackPanel pentru un meniu destinat butonului pentru NAVIGARE către noua fereastră și un cadru Frame., care să asigure navigarea spre fereastra secundară.

În vizualizarea (marcajul) XAML (MainWindow.xaml) va apărea - pe lângă codul anterior al proiectului HELLO, WORLD (se va adăuga după <Grid Background="Ivory">:

<StackPanel x:Name="buttonsPanel" Orientation="Horizontal"

    VerticalAlignment="Top" Height="50" Background="Ivory">


    <Button x:Name="buttonInformatii" Content="INFORMAȚII UTILE" 

    HorizontalAlignment="Left"

    Margin="15,5,0,5"

    FontSize="11" 

    Background="DarkSlateGray"

    Foreground="White"

    Height="30" Width="102"

    Click="buttonInformatii_Click" />

    

 </StackPanel>


<Frame x:Name="MainFrame" Margin="15 75 15 15"

NavigationUIVisibility="Hidden"/>

În codul C# (MainWindow.xaml.cs) se va adăuga la codul anterior al proiectului HELLO, WORLD, după metoda buttonSayHello_Click, pentru a se realiza acțiunea de navigare la noua fereastră cu INFORMAȚII:

private void buttonInformatii_Click(object sender, RoutedEventArgs e)

{

    Window_Informatii win = new Window_Informatii

    {

        WindowStartupLocation = WindowStartupLocation.CenterScreen

    };

    win.Show();

}

În vizualizarea (marcajul) XAML al noii ferestre (Window_Informatii.xaml) va apărea:

<Window x:Class="HelloWorldWPF.Window_Informatii"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="Informatii"

        Height="300"

        Width="500">

    <Grid>

        <Label x:Name="labelTitle" Background="AliceBlue"

           Margin="0" Height="40" 

           Content="Fereastra INFORMATII UTILE" Foreground="Navy"

           VerticalAlignment="Top"

           FontSize="20"

           HorizontalContentAlignment="Center" />


        <Label Content="*Aceasta este o etichetă (Label) - text care nu poate fi modificat de utilizator." 

            HorizontalAlignment="Center" 

            Margin="0,45,0,0" 

            FontSize="10"

            VerticalAlignment="Top" VerticalContentAlignment="Center"/>

    </Grid>

</Window>

În codul C# (Window_Informatii.xaml.cs):

using System.Windows;


namespace HelloWorldWPF

{

    public partial class Window_Informatii : Window

    {

        public Window_Informatii()

        {

            InitializeComponent();

        }

    }

}

Adăugarea unei pagini într-un proiect WPF App

ADĂUGAREA UNEI PAGINI NOI LA PROIECT: În panoul SOLUTION EXPLORER (din dreapta ecranului), click dreapta pe numele proiectului > Add > Page (WPF) > redenumirea acesteia LoginPage

În vizualizarea (marcajul) XAML (MainWindow.xaml) va apărea - pe lângă codul anterior al proiectului HELLO, WORLD (se va adăuga după <Grid Background="Ivory">, în StackPanel de la Window_Informatii)::

<Button x:Name="buttonLogin" Content="LOGIN"

Margin="270,5,0,5"

FontSize="15" 

Background="DarkBlue"

Foreground="White"

Height="30" Width="105"

Click="buttonLogin_Click" />

În codul C# (MainWindow.xaml.cs) se va adăuga la codul anterior al proiectului HELLO, WORLD, după metoda buttonInformatii_Click:

private void buttonLogin_Click(object sender, RoutedEventArgs e)

{

    this.Content = new LoginPage();

}

În vizualizarea (marcajul) XAML al noii ferestre (LoginPage.xaml) va apărea:

<Page x:Class="HelloWorldWPF.LoginPage"

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      xmlns:local="clr-namespace:HelloWorldWPF"

      mc:Ignorable="d" 

      d:DesignHeight="450" d:DesignWidth="800"

      Title="Login">


    <Grid Background="Ivory">

        <StackPanel Grid.Row="0">

            <Label x:Name="labelTitle"

           Background="AliceBlue"

           Height="40"

           Content="LOGIN"

           Foreground="Navy"

           FontSize="20"

           HorizontalContentAlignment="Center"/>

            

            <Grid Height="100" Margin="0,20,0,0">

                <Grid.ColumnDefinitions>

                    <ColumnDefinition/>

                    <ColumnDefinition Width="20"/>

                    <ColumnDefinition Width="2*"/>

                </Grid.ColumnDefinitions>


                <Grid.RowDefinitions>

                    <RowDefinition Height="*"/>

                    <RowDefinition Height="10"/>

                    <RowDefinition Height="*"/>

                </Grid.RowDefinitions>


                <TextBlock Text="Username"

                VerticalAlignment="Center" HorizontalAlignment="Right"

                FontSize="16" TextAlignment="Center"

                Grid.Row="0" Grid.Column="0" />


                <TextBlock Text="Password"

                VerticalAlignment="Center" HorizontalAlignment="Right"

                Grid.Row="2" Grid.Column="0"

                FontSize="16" TextAlignment="Center" />


                <TextBox x:Name="textBoxUsername"

                Margin="0,5,20,5"

                VerticalContentAlignment="Center"

                Grid.Row="0" Grid.Column="2"

                FontSize="16" />

                    

                <PasswordBox x:Name="passwordBox"

                FontSize="16"

                Margin="0,5,20,5"

                VerticalContentAlignment="Center"

                Grid.Row="2" Grid.Column="2" />

            </Grid>


            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" 

                Margin="0,20,0,0" Height="auto">


                <Button x:Name="buttonOK" Content="OK"

                    FontSize="16" IsDefault="True"

                    Background="WhiteSmoke"

                    Margin="10,0" Height="40" Width="120"

                    Click="buttonOK_Click" />

                <Button x:Name="buttonCancel" Content="Cancel"

                    FontSize="16" IsCancel="True"

                    Margin="10,0" Height="40" Width="120"

                    Click="buttonCancel_Click" />

            </StackPanel>

        </StackPanel>

    </Grid>

</Page>

În vizualizarea (marcajul) XAML al noii ferestre (LoginPage.xaml.cs) va apărea:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;


namespace HelloWorldWPF

{

    public partial class LoginPage : Page

    {

        public string Username { get; private set; }

        public string Password { get; private set; }

        public LoginPage()

        {

            InitializeComponent();

            textBoxUsername.Focus();

        }


        private void buttonOK_Click(object sender, RoutedEventArgs e)

        {

            string username = textBoxUsername.Text;

            string password = passwordBox.Password;


            MessageBox.Show($"Username = {username} \n Password = {password}",

                "Login",

                MessageBoxButton.OK, 

                MessageBoxImage.Information);

        }


        private void buttonCancel_Click(object sender, RoutedEventArgs e)

        {

            NavigationService?.GoBack();

        }

    }

}

Entity Frame Core (framework și O/R Mapper) și MySQL în aplicații WPF

(mod de lucru: Database First - pe platforma .NET 8).

1. CREAREA UNUI BAZE DE DATE

- în XAMPP (se descarcă gratuit și se instalează - oferă MySQL, Apache și phpMyAdmin - se instalează și phpMyAdmin) - la Action: START Apache și MySQL, apoi click ADMIN 

- Local Host - numele serverului pe calculator: - adresa Local Host (afișată sus: Server 127.0.0.1

- pe serverul MySQL (se creează baza de date: Exercitiu - utilizator și parola: user - administratorul trebuie să acorde toate privilegii Userului) are activat protocolul TCP/IP și lucrează pe portul TCP 3306;

2. CREAREA UNUI CONT PE SERVERUL MYSQL (pentru conectarea aplicației)
3. ADĂUGARE DE INFORMAȚII ÎN BAZA DE DATE (realizarea de tabele și adăugarea da date în tabele)

- o bază de date nou creată nu conține tabele sau date, acestea trebuie create (se poate folosi un script SQL pentru importul tuturor tabelelor cu date)  

4. APLICAȚIE WPF PENTRU .NET 8

CREATE A NEW PROJECT > se alege WPF APP (.NET FRAMEWORK - NET8) > (în fereastra Configure your new project - Project Name: HelloWorldWPF, - Solution Name: HelloWorldWPF_CS)

5. DEFINIREA UNUI ȘIR  DE  CONECTARE LA BAZA DE DATE
6. AFIȘAREA ÎN APLICAȚIE A UNOR DATE PRELUATE DIN BAZA DE DATE
 Entity Frame Core (framework open source - o structură predefinită, oferind instrumente și reguli  gratuit, multiplatformă, pentru creare de aplicații și servicii cloud) - dezvoltat pentru .NET pentru acces la date
- permite dezvoltatorilor de aplicații să lucreze cu LINQ (Language Integrated Query), un set de instrucțiuni de interogare a colecțiilor de date, integrate în limbaje de programare de nivel înalt, care permite dezvoltatorilor să scrie interogări eficiente în limbajul C#.
 O/R Mapper (ORM) 
- un sistem de adaptare (potrivire, conversie) a datelor între modul de lucru obiectual (clase, obiecte, colecții de obiecte și limbaj de programare de nivel înalt) și modul de lucru relațional (tabele, rânduri, coloane și interogări SQL).
 Aplicații de administrare a bazelor de date MySQL: phpMyAdmin, DBeaver, HeidiSQL, Navicat, SQLyog, dbForge for MySQL 

V-au fost de folos informațiile din această pagină? 

Susțineți-ne (www.rosfera.ro/sustine) să putem susține acest proiect si celelalte activități de la RoSfera

* distribuind postările noastre, iar dacă aveți posibilitatea

* fie să redirecționați din impozitul pe venit personal sau afacerii,

* fie să sponsorizați (*cheltuielile unei persoane juridice cu sponsorizările se scad din impozitul pe profit datorat, fără a depăși 20% din acesta și nici 0,75% din cifra de afaceri -sunt cheltuieli nedeductibile integral). sau

* să donați, fiind ONG, depindem de implicarea celor care ne apreciază activitatea pe care o desfășurăm împreună cu colaboratorii.

Voluntariat/ Parteneriate

Implicare în proiectele și activitățile noastre 

Găzduirea unor activități în spații/ ateliere 

  • VOLUNTARII (creativi și nu numai) sunt promovați pe căile noastre și pot beneficia de diverse oportunități din activitățile noastre sau din partea partenerilor

  • PARTENERII (companii, organizații, instituții) sunt piloni de bază ai activității noastre și dorim să le susținem activitatea, la rândul nostru, prin metode și căi agreate reciproc.

 

 

Financiar

Donații

Sponsorizări

 Redirecționare 3,5% sau 20% 

  • SPONSORII ȘI CEI CARE NE SUSȚIN CU DONAȚII vor avea de câștigat accesul la valorile pe care le promovăm și la activitățile pe care le derulăm, precum și beneficii anunțate în cadrul fiecărei activități în parte.

  • Donații putem primi și în contul ASOCIAȚIEI ROSFERA (înregistrată la Registrul Comerțului/ Asociațiilor și Fundațiilor nr. 341/ 25.05.2021, C.I.F. 44439483):

RO53 RNCB 0182 1701 7408 0001, deschis la BCR, iar pentru sponsorizări vă rugăm să ne contactați pentru contract.

Ne-ar putea fi utile

Servicii sau donații de cărți, materiale sau obiecte care pot fi refolosite/ recreate

  •  În PUNCTELE DE CULTURĂ sau în atelierele noastre ne-ar fi de folos implicarea prin servicii sau donații, astfel ne susțineți activitățile și proiectele și putem, la rândul nostru, să susținem creativii.

 

 

PARTENERI

care ni s-au alăturat

 

Apreciem și pe această cale implicarea celor care ni s-au alăturat în proiecte sau activități:

Editura Saga

www.editurasaga.ro