E Learning. Aplicatie Pentru Invatare Asistata pe Calculator
CAPITOLUL 1. Despre E-learning
E-learning (sau eLearning) reprezintă utilizarea de media electronică și tehnologii informaționale și de comunicație (ICT) în educație. E-learning la general include toate formele de tehnologie educațională în educatie și învățare. E-learning este sinonim cu multimedia learning, technology-enhanced learning (TEL), computer-based instruction(CBI), computer-based training (CBT), computer-assisted instruction or computer-aided instruction (CAI), internet-based training (IBT), web-based training (WBT), online education, virtual education, virtual learning environments (VLE), m-learning.
1. În sens larg, prin elearning (sau e-learning) se înțelege totalitatea situațiilor educaționale în care se utilizează semnificativ mijloacele Tehnologiei Informației și Comunicării (TIC). Termenul a fost preluat din literatura anglo-saxonă, fiind extins de la sensul primar, etimologic, de învățare prin mijloace electronice, și acoperind acum aria de intersecție a acțiunilor educative cu mijloacele informatice moderne. Computerul și materialele electronice/ multimedia sunt utilizate ca suport în predare, învățare, evaluare sau ca mijloc de comunicare.
2. În sens restrâns, elearning-ul reprezintă un tip de educație la distanță, o experiență planificată de predare-învățare organizată de o instituție ce furnizează mediat materiale într-o ordine secvențială și logică pentru a fi asimilate de studenți în maniera proprie. Medierea se realizează prin noile tehnologii ale informației și comunicării – în special prin Internet. Internetul constituie atât mediul de distribuție al materialelor, cât și canalul de comunicare între actorii implicați.
Actualmente, termenul e-learning a ajuns să înlocuiască practic toți termenii care desemnau o nouă manieră de integrare a mijloacelor TIC în procesul de instruire.
Realizările e-learning pot fi clasificate din mai multe puncte de vedere. Vom selecta două dintre ele:
Realizări e-learning pe bază de CD: cursanții primesc cursurile pe CD, vor instala aceste cursuri pe calculatorul propriu și pot începe pregătirea, învățarea;
Realizări e-learning pe bază de rețea: cursurile pot fi accesate prin intermediul rețelei (intranet/internet) de pe serverul central.
În ambele situații, cursurile sunt în format electronic, diferența constă doar în modul de urmărire a studiului. Dacă, în primul caz, specialistului care coordonează cursurile îi este foarte greu să obțină informații în legătură cu modul în care cursantul parcurge materialul, are sau nu întrebări, reușește să asimileze materia cerută, în cel de-al doilea caz, aceste informații pot fi accesate de pe serverul care furnizează serviciile de curs.
Realizările e-learning-ului cuprind următoarele elemente, care se grupează în jurul cursantului dornic de a obține cunoștințele necesare:
Infrastructură – mulțimea de elemente, hard și soft, care permite accesul la informațiile pe care cursantul vrea să și le însușească;
Conținut – cunoștințele, sub formă electronică, care acoperă tematica cursului (sub formă de text, audio, video, simulări);
Servicii – realizarea planurilor de învățământ, relația cu învățământul tradițional, evidența cunoștințelor dobândite de cursanți, managementul capacității cursanților, cerințe pe care orice realizare e-learning va trebui să le gestioneze în mod corespunzător.
Principalii participanți în proces sunt:
administratorul de sistem;
instruiții;
instructorul.
În sens larg, prin e-learning se înțelege totalitatea situațiilor educaționale în care se utilizează semnificativ mijloacele Tehnologiei Informației și Comunicațiilor (TIC). Termenul, preluat din literatura anglo-saxonă, a fost extins de la sensul primar, etimologic, de învățare prin mijloace electronice, acoperind acum aria de intersecție a acțiunilor educative cu mijloacele informatice moderne.
În accepțiunea modernă, procesul de învățământ bazat pe resurse utilizează atât modele clasice cu suporturile cunoscute (modele fizice), cât și modele virtuale aparținând tehnologiei multimedia. e-learning-ul reprezintă o componentă a modelului bazat pe tehnologie.
Implementarea sistemului e -learning
O aplicatie e-learning are practic resurse nelimitate: se pot ține cursuri și seminarii online, se pot accesa cursurile și seminariile de pe site-ul instituției de învatamânt respective, se pot citi și publica referate, poate fi creată o bază de date care va ține loc de biblioteca etc. Profesorul îsi poate elabora cursul și îl poate publica oricând în timp util, iar cursanții îl pot accesa online. De asemenea, pentru partea de laborator se pot scrie programe care să simuleze diferitele situații cu datele specifice unei lucrări de laborator. Orice aplicație e-learning trebuie să respecte o serie de cerințe obligatorii.
Să permită înscrierea și/sau validarea cursanților pentru un anumit domeniu, nivel de cunostințe sau categorie de vârsta. Sistemul poate permite unui cursant să aibă acces la alte cursuri și teste după obținerea unui anumit punctaj.
Să ofere interfețe prietenoase, clare și intuitive, care să determine o curbă ascendentă de evoluție a pregătirii cursanților.
Să asigure accesul permanent la rapoarte și punctaje specifice pentru fiecare cursant în parte. Realizarile și punctajele vor fi stocate într-o baza de date, de unde vor putea fi accesate oricând, de oriunde și sub orice formă.
Să ofere mobilitate maximă prin posibilitatea accesului din orice loc (prin Internet) la teste, cursuri si rapoarte.
Să conțină forumuri de discuții și chatroom pentru asigurarea schimbului rapid de informații între cursanți, respectiv între profesori și cursanți și sa ofere posibilitatea cursurilor online, în zile și la ore stabilite, prin facilitatile multimedia oferite de infrastructura Internet-ului.
Să realizeze o tratare independentă a cursanților în functie de aptitudini și rezultate, dar să ofere și cursuri cu audiență foarte mare (sute/mii de cursanți simultan).
Să asigure un nivel redus al costurilor unui curs tinând cont de faptul ca nu este necesara o sala de curs fizica, numarul de cursanți nu este limitat de capacitatea salii, iar materialele didactice sunt virtuale.
Să ofere posibilitatea fiecărui cursant sau profesor de a-și personaliza interfața folosită pentru a raspunde necesitaților și dorințelor proprii.
Să permită o administrare ușoară la orice nivel de detaliere și de oriunde este disponibil folosind un calculator conectat la Internet.
Să asigure posibilitatea accesului pentru utilizare sau administrare atât din poziții fixe (calculator desktop conectat la Internet), cât și mobile (notebook).
La dezvoltarea paginilor web suport pentru e-learning trebuie luate în considerare și aspect de natura tehnico-profesională.
Devierea de la scop. Pagina trebuie să fie clară și concisă, urmărindu-se în primul rând cantitatea și calitatea informației în detrimental unei grafici sofisticate și amuzante.
Pentru aceasta trebuie avute în vedere:
Scopul paginii. Pagina va fi folosită independent ca suport de curs sau în combinare cu alte tehnologii video sau audio (principiile de proiectare a instrumentelor instructive se aplică și în cazul paginilor web de acest tip);
Usurința în lucrul cu instrumentul software folosit pentru dezvoltare;
Utilizarea informațiilor deja folosite ca suport de curs. Existența suporturilor de curs în format electronic ușurează mult munca având în vedere ca toate instrumentele software permit importul fișierelor text;
Consultarea paginilor web existente. Exista deja o mulțime de pagini web care permit studenților să urmeze cursuri complete.
Dezvoltarea unor pagini web cu conținut superficial și incoerent. Pentru evitarea acestei probleme trebuie avute în vedere:
Consultarea site-urilor care dau informații despre tipurile de pagini web și stilurile acestora;
Utilizarea unui format specific prin folosirea unor culori standard pentru fonduri și text, astfel încât textul sa fie lizibil și clar;
Utilizarea unor pagini scurte sau indexate, care permit cititorului o navigare ușoară prin pagina web și un acces direct și facil la informațiile dorite;
Maximizarea legăturilor către informații interne și minimizarea legăturilor către informații externe, scopul paginii fiind acela de a oferi informații despre un subiect anume.
Orice legatură externă va permite accesul către pagini care conțin informații din același domeniu.
Utilizarea de imagini sau clipuri audio și video de dimensiuni mari, care nu sunt necesare. Astfel de elemente fac paginile mai atractive dar, în acelasi timp, necesită echipamente mai performante, care să permită încarcarea lor într-un timp acceptabil. În lipsa acestor echipamente, citirea unor astfel de pagini este greoaie și produce frustrare în rândul studenților care nu posedă astfel de echipamente. Dacă din considerente didactice astfel de elemente sunt strict necesare trebuie ca toți participanții la cursul virtual sa aibă acces la echipamente care sa le permită vizionarea elementelor mai sus menționate
Actualizarea permanentă a conținutului paginii. Trebuie să se verifice actualitatea informațiilor afișate pe pagina, inclusiv cele care se referî la suporturi de curs, examene sau legături către alte pagini.
Elementele care trebuie cuprinse de o pagină web suport pentru e-learning sunt:
informații despre curs și instructor, care includ date despre temele care vor fi acoperite prin cursuri, orarul de întâlniri fizice sau virtuale între participanții la curs etc.;
elemente de comunicare internă, care oferă acces la e-mail, grupuri de discuții, formulare prin care studenții oferă date biografice sau despre problemele pe care le întâlnesc în procesul educațional;
informații despre teme si examene, care includ examenele în sine, distribuite online pentru completare și chiar predare, soluții la probleme, exemple etc.;
materiale de curs, care sunt texte accesibile online sau prin fișiere de pe server;
demonstrații animate, elemente audio și video, care sunt mult mai complexe și necesită ca toți studenții să aibă acces la calculatoare performante;
materiale suplimentare, în format electronic, care să completeze informațiile oferite de suportul de curs: articole, studii de cercetare, monografii, rapoarte știintifice etc. În plus, trebuie să existe legături către alte locații web cu informații din același domeniu, alte pagini web suport de curs existente pe Internet, biblioteci virtuale etc.
Forme de exprimare pentru e-learning
Paradigma e-learning a procesului educațional în societatea informațională cunoaște cel puțin trei forme de manifestare: clasele distribuite, învațământul independent și învatamântul deschis la distanta (IDD).
Modelul claselor distribuite. Tehnologiile de telecomunicație interactivă extind clasicul model al cursurilor desfășurate într-o sală de clasă către cursurile desfașurate cu un grup de studenți aflați în mai multe locații, rezultatul constituindu-l un grup de studiu în care o parte din cursanți se află în sala de clasă, iar alta parte la distanță. Principalele atribute ale acestei forme de exprimare se regăsesc în tabelul 2.
Tabelul 1. Modelul claselor distribuite
Modelul învățării independente eliberează studentul de obligația de a se afla într-un anumit loc la un anumit moment dat. Acesta primește o varietate de materiale, suporturi de curs și posibilitatea de a avea acces direct la un instructor/profesor care îi va raspunde la întrebari, îl va îndruma și îi va evalua munca. Contactul individual între student și profesor este realizat prin unul sau mai multe mijloace de comunicare: telefon, mail vocal, teleconferințe, poșta electronică sau tradițională. Principalele atribute ale acestei forme de exprimare se regăsesc în tabelul 3.
Tabelul 2. Modelul învatarii independente
Modelul învatamântului deschis la distanță implica folosirea cursurilor tipărite și a materialelor media pentru a permite cursanților să studieze când și unde doresc, precum și folosirea ocazională a TIC pentru întâlniri comune ale grupului de studenți. Principalele atribute ale acestei forme de exprimare se regăsesc în tabelul 4.
Tabelul 3. Modelul IDD
Structura e-learning-ului
O caracterizare a învățământului electronic (e-learning) poate fi realizată pe baza următoarelor:
procesul de învățare este orientat către instruit și se realizează într-o locație virtuală
resursele educaționale sunt accesibile pe Web și distribuite prin utilizarea, integrarea, accesarea bibliotecilor electronice și materialelor multimedia, prin antrenarea specialiștilor în discuțiile subiecților
instruiții beneficiază de orientarea unui tutore (instructor, moderator) care planifică activitatea grupului de participanți, supune dezbaterii acestora subiecte din curs, fie în conferințe asincrone (forumuri de discuții, blog-uri), fie sincrone (chat, clasă virtuală), furnizează resurse auxiliare, comentează teme, impune direcții
prin interacțiune și colaborare, grupul de participanți formează, pe parcursul cursului (de multe ori și după), o comunitate virtuală; aceștia pot fi caracterizați prin așa numita “fluiditate a rolurilor”, prin balansul continuu al rolului instructor-instruit în grupul de învățare ("symmetric knowledge advancement" – Scardamalia, 1995), prin restructurarea continuă a echipelor de învățare în funcție de interese sau obiective
materialul cursului are o componentă statică, cea pregătită de tutore împreună cu o echipă specializată, și una dinamică, rezultată din interacțiunea participanților, din sugestiile, comentariile, resursele aduse de aceștia
cele mai multe medii de e-learning permit monitorizarea activității participanților, iar unele și simulări, lucrul pe grupuri, interacțiunea audio, video
Actualmente, termenul e-learning a ajuns să înlocuiască practic toți termenii care desemnau o nouă manieră de integrare a mijloacelor TIC în procesul de instruire.
Realizările e-learning pot fi clasificate din mai multe puncte de vedere. Vom selecta două dintre ele:
Realizări e-learning pe bază de CD: cursanții primesc cursurile pe CD, vor instala aceste cursuri pe calculatorul propriu și pot începe pregătirea, învățarea
Realizări e-learning pe bază de rețea: cursurile pot fi accesate prin intermediul rețelei (intranet/internet) de pe serverul central
În ambele situații, cursurile sunt în format electronic, diferența constă doar în modul de urmărire a studiului. Dacă, în primul caz, specialistului care coordonează cursurile îi este foarte greu să obțină informații în legătură cu modul în care cursantul parcurge materialul, are sau nu întrebări, reușește să asimileze materia cerută, în cel de-al doilea caz, aceste informații pot fi accesate de pe serverul care furnizează serviciile de curs.
Realizările e-learning-ului cuprind următoarele elemente, care se grupează în jurul cursantului dornic de a obține cunoștințele necesare:
Infrastructură – mulțimea de elemente, hard și soft, care permite accesul la informațiile pe care cursantul vrea să și le însușească
Conținut – cunoștințele, sub formă electronică, care acoperă tematica cursului (sub formă de text, audio, video, simulări)
Servicii – realizarea planurilor de învățământ, relația cu învățământul tradițional, evidența cunoștințelor dobândite de cursanți, managementul capacității cursanților, cerințe pe care orice realizare e-learning va trebui să le gestioneze în mod corespunzător
Principalii participanți în proces sunt:
administratorul de sistem
instruiții
instructorul
Platforma e-learning este un produs program având următorul set minimal de cerințe care să permită:
asigurarea procedurilor privind instalarea, configurarea și administrarea
utilizarea unei interfețe prietenoase adaptabilă dinamicii procesului educațional
utilizarea de suport logic de comunicare sincronă și asincronă;
administrarea și monitorizarea informațiilor
un management accesibil al conținutului educațional
utilizarea de module de editare de conținut educațional sub diverse formate
facilitarea autoevaluării offline prin proceduri asincrone și a evaluării online prin proceduri sincrone a cunoștiințelor asimilate
un program de pregătire continuă, cu verificări parțiale pe tot parcursul procesului educațional
asistarea utilizatorilor în utilizarea software-ului educațional
înregistrarea feedback-ului privind calitatea serviciilor educaționale oferite, precum și a calității platformei educaționale.
Aceste facilități tehnice au ca scop final întâmpinarea dorințelor și a nevoilor de instruire ale studenților, pentru aceasta fiind necesară o bună corelare a aspectelor tehnice cu cele pedagogice.
Majoritatea universităților românești au înființat secții de învățământ la distanță și sunt în curs de adoptare sau perfecționare a unei platforme de învățare.
Consiliul Național de Evaluare și Acreditare Academică (CNEAA) a stabilit un set de “Standarde privind utilizarea platformelor de învățământ electronic în învățământul la distanță”. Acestea se referă la:
servicii oferite studenților
resurse de învățământ specifice
servicii oferite personalului didactic
accesibilitatea la serviciile oferite de platforma de învățământ electronic
managementul calității serviciilor oferite de platformă
documente prezentate de instituție
Avantajele E-Learningului
Avantajele eLearning ar fi:
centrarea pe student, participant
accesul in timp-real la cunostințe, de oriunde și oricând
nu sunt necesare cheltuieli de deplasare, nici întreruperea activității profesionale curente
participanții colaborează și învață (să lucreze ) împreună – putem face o paralelă între învățământul tradițional și cel online urmărind datele psihologului William Glasser, care spune că reținem:
10% din ce citim
20% din ce auzim
30% din ce vedem
50% din ce vedem și auzim
70% din ce discutăm cu alții
80% din ce experimentăm
95% din ce îi invățăm pe alții
materialul este de multe ori personalizat cunostințelor și experienței anterioare a studentului
de multe ori sistemul integrat de invățare oferă funcțiuni ca cele legate de înregistrare, plata online, monitorizarea progresului studenților, testare automată.
Principalul avantaj al unui sistem eLearning constă în flexibilitatea care încurajează stilul propriu de învățare al cursantului (tabelul 4). În ultima perioada, învatamântul tradițional începe să piardă teren, lasând loc educației asistate de calculator, acest lucru datorându-se în principal costurilor reduse implicate de teleeducație. Conform unui studio realizat de Corporate University Xchange, școlile tradiționale vor suferi un declin de la 80% în 1999 pâna la 60% în 2003, în favoarea formelor de e-learning (figura 1).
Tabelul 4. Principalele avantaje oferite de e-learning
Dintre dezavantaje:
Studiile realizate indică faptul că pregătirea unui curs online este mai costisitoare decât cea a unuia tradițional (dar costurile sunt apoi amortizate rapid), în echipa de "construire" a unui curs intrând persoane specializate în web design, design instrucțional.
eLearning poate fi eficient atunci când dotarea cu calculatoare este corespunzătoare, când conexiunile la Internet există si sunt rapide – altfel, poti avea senzația că stai la ușa amfiteatrului, neputând intra.
Costul unui curs online este destul de ridicat – pentru a urma un astfel de curs, trebuie sa ai incredere ca ceea ce ți se oferă este de calitate.
Capitolul 2. Introducere in VHDL
Limbajele de descriere hardware (HDL’s) sunt limbaje de programare utilizate pentru descrierea diferitelor circuite electrice, în special a celor digitale. Aceste limbaje pot fi folosite pentru a descrie un circuit din punctul de vedere al alcătuirii fizice a acestuia cât și pentru descrierea unor circuite din punctul de vedere al funcționalității lor, fără a interesa structura lor fizică.
Limbajul VHDL, ca orice limbaj de descriere hardware permite descrierea circuitelor atât folosind metodologia Bottom-Up cât și metodologia Top-Down.
Metoda tradițională de proiectare a circuitelor electrice este Bottom-Up. Fiecare circuit este descris la nivelul de porți logice utilizând celulele standard. Ținând cont de complexitatea circuitelor moderne, această apropiere este din ce în ce mai puțin folosită și aproape imposibil de întreținut.
Tipul de proiectare dorit de toți proiectanții moderni este cel Top-Down. Un design Top-Down real permite testarea circuitelor încă din faza de proiectare permițând schimbarea tehnologiilor atunci când acestea nu mai corespund. De asemeni această abordare oferă un alt număr de avantaje majore și este în general preferată în ultimii ani.
O strategie pur Top-Down este de obicei foarte greu de urmat și de aceea este de preferat o structurare a proiectului folosind această metodă dar o dezvoltare a diferitelor module aflate la nivelul cel mai de jos folosind strategia Bottom-Up. În concluzie, în general noile circuite sunt gândite global Top-Down și implementate în mare parte Bottom-Up.
2.1. Dezvoltarea limbajului VHDL
VHDL este un limbaj de programare puternic, cu construcții complexe, proiectat și optimizat pentru a descrie comportarea circuitelor și a sistemelor digitale.
VHDL este un limbaj de programare dezvoltal și optimizat pentru descrierea funcțională a sistemelor digitale, care oferă:
Posibilitatea descrierii la nivel de detalii a funționării componentelor electronice de la nivelul de poartă logică până la microprocesoare și circuite orientate pe aplicații. Modelele VHDL relizate pot fi înglobate ca blocuri în descrierea unor circuite complexe, pentru simulare;
Posibilitatea descrierii funționale/structurale a unui circuit digital în scopul sintezei automate
Posibilități pentru programare structurată
Posibilitatea descrierii naturale a unor evenimente concurente, specifice funcționării reale a unor evenimente concurente, specifice funcționării reale a circuitelor digital;
Posibilitatea generării și execuției unor programe speciale pentru verificarea funcționării unei scheme descrise VHDL. Astfel de programe se numesc test bench și fac parte obligatoriu din orice proiect alături de modelul circuitului sintetizat/analizat. Ele conțin descrierea stimulilor și a rezultatelor ce ar trebui obținute prin aplicarea acestora, în scopul depistării automate prin comparare a unor erori funcționale.
Când utilizăm un astfel de limbaj trebuie să ținem cont de următoarele elemente:
Există unele deosebiri între a scrie VHDL pentru sinteză și a scrie VHDL pentru simulare;
Este posibil ca un program VHDL să fie perfect din punct de vedere sintactic dar neimplementabil datorită unor greșeli generate de neînțelegerea fenomenelor la nivel fizic
Un proiect scris în VHDL permite sinteza și simularea pentru o mare varietate de tehnologii, într-un timp relativ scurt
La nivelele superioare, proiectantul poate să se concentreze pe descrierea funcțională a schemelor și nu pe detalii de implementare.
Pot fi realizate teste de performanță pentre diversele variante de sinteză în scopul fundamentării unei decizii privind soluția optimă
În anumite situații este necesară intervenția proiectantului pentru a elimina anumite anomalii din soluția generată automat.
Dezavantajele utilizării VHDL, ca și în cazul celorlalte HDL, sunt legate de calitatea compilatoarelor, de posibilitatea de a specifica diverse directive de sinteză cu scopu de a controla criteriile de optimalitate, de calitatea simulatoarelor.
Proiectarea tradițională este un proces manual în care circuitul final este obținut prin utilizarea unor unelte de intrare schematice. Acest proces are însă numeroase dezavantaje motiv pentru care a fost rapid înlocuit de noile metode de proiectare. Proiectanții, mereu confruntați cu probleme legate de prețul produselor și de reducerea timpului de proiectare, pentru a obține rezultate cât mai bune, au adoptat noua metodologie de proiectare, denumită “top-down”. Acest concept presupune utilizarea limbajelor de descriere hardware și a sintezei alături de uneltele folosite în procesul tradițional de simulare. Produsele care permit utilizarea unor unelte de proiectare de acest fel sunt așa numitele “Application-Specific Integrated Circuits” (ASICSs) și “Field Programmable Gate Arrays” (FPGAs).
În ultimii ani, metodologia de proiectare abstractă de tip “top-down” s-a impus în mod evident, avantajele aduse de noile metode de proiectare fiind evidente. Iată câteva dintre aceste avantaje: productivitate mărită obținută prin reducerea ciclului de proiectare, reducerea costurilor, posibilitatea reutilizării schemei, flexibilitate mărită în privința modificării schemei, utilizarea unor biblioteci tehnologice alternative, reducerea mărimii circuitului și posibilitatea generării automate de circuite testabile, verificarea mai bună și mai rapidă a circuitului.
Necesitatea unui limbaj de descriere hardware a apărut la începutul anilor 1980, în cadrul programului de cercetare VHSIC, program lansat de Departamentul Apărării din Statele Unite ale Americii. În cadrul acestui program au fost implicate mai multe companii americane, care au participat la proiectarea circuitului VHSIC. La acea dată, majoritatea companiilor foloseau metode de descriere hardware proprii pentru a prezenta și dezvolta circuite integrate. Cercetătorii s-au confruntat astfel cu problema descrierii unor circuite de dimensiuni foarte mari pentru acea perioadă și cu problema integrării variantelor de descriere ale diferitelor echipe de cercetare din companiile furnizoare. Astfel, s-a simțit nevoia elaborării unor instrumente și a unor metode de proiectare avasate care să rezolve aceste probleme.
Pentru a rezolva această cerință, în iulie 1983, Departamentul Apărării din Statele Unite a reunit o echipă de ingineri de la trei companii – IBM, Texas Instruments și Intermetrics – pentru a defini specificațiile și pentru a implementa o nouă metodă de proiectare utilizând un limbaj de descriere care să poată fi interpretat și executat de calculator. Prima variantă a unui limbaj de descriere hardware disponibil pentru publicul larg a apărut în august 1985 și este versiunea VHDL 7.2.
Principalul avantaj al utilizării VHDL a fost reducerea la jumătate a costurilor de operare ale sistemelor electronice militare. Alte avantaje au decurs apoi din posibilitatea realizării unei descrieri bine structurate și simple a unor circuite complexe și din flexibilitatea limbajului în utilizarea diferitelor modele.
După lansarea versiunii 7.2 a limbajului, a apărut în mod firesc necesitatea standardizării acestuia. Astfel, în 1986 limbajul a fost înaintat pentru standardizare către IEEE (Institute of Electrical and Electronics Engineers). După îmbunătățiri și modificări substanțiale, realizate de o echipă formată din reprezentanți comerciali, guvernamentali și academici, limbajul a fost standardizat de către IEEE în decembrie 1987, sub denumirea Standard IEEE 1076-1987. Deși standardul IEEE 1076 definește în întregime limbajul VHDL, anumite construcții ale limbajului nu permit o descriere complet portabilă a sistemelor digitale, adică pentru aceeași descriere VHDL implementată pe instrumente de sinteză aparținând diferiților producători nu se obțin rezultate identice în simulare. Aceste probleme se datorează faptului că VHDL suportă multe tipuri de date abstracte dar nu suportă valori de semnale normale cum ar fi înaltă impedanță sau valoare nedefinită. Imediat după adoptarea standardului IEEE 1076-1987, companiile care produceau programe pentru sinteza codurilor VHDL au început să definească tipuri de date proprii pentru a permite o mai bună utilizare a produselor lor. Aceast fapt a determinat o nouă scădere a portabilității acestor coduri și de aceea a apărut necesitatea introducerii unor noi tipuri de date standard care să remedieze neajunsurile standardului IEEE 1076-1987. Standardul IEEE 1164 definește un pachet care conține un un tip de date cu nouă valori posibile. Acest tip de date se numește standard logic iar pachetul amintit este pachetul standard logic sau în unele referințe bibliografice MVL9 (Multivalued Logic, 9 values).
Standardele IEEE 1076-1987 și IEEE 1164 alcătuiesc împreună standardul VHDL complet. Ca oricare standard IEEE care se revizuiește din cinci în cinci ani. În 1993 sintaxa a devenit mai consistentă și a permis mai multa flexibilitate, a extins tipul caracter pentru a permite utilizarea caracterelor printabile ISO-8859-1, a adaugat operatorul xnor etc. În anii 2000 și 2002 schimbări minore au introdus ideea tipurilor protejate – un concept similar claselor în limbajul C++. În iunie 2006, Comitetul VHDL tehnic de Accellera (Accellera este o organizație care a fost infiintata în anul 2000 prin fuziunea a Open Verilog International și VHDL International și delegată de către IEEE pentru a lucra la următoarea actualizare a standardului) a aprobat așa-numitul proiect VHDL 3.0. Menținând în același timp compatibilitatea cu versiunile mai vechi, acest standard propus prevede numeroase extensii care fac scrierea și gestionarea mai ușoară a codului VHDL. Schimbări importante au fost includerea standardelor copil (1164, 1076.2, 1076.3) în standardul principal 1076, un set extins de operatori, sintaxă mai flexibilă a instrucțiunii case și de generare a declarațiilor, încorporarea VHPI (interfață la limbajele C / C ++) și a unui subset PSL (Property Specification Language). Aceste modificări au îmbunătățit calitatea codului VHDL, au dat flexibilitate testbench-urilor și au permis utilizarea mai largă a VHDL pentru o descriere la nivel de sistem. În 2008, Accellera a remediat peste 90 de probleme descoperite în timpul perioadei de probă pentru versiunea 3.0 și a aprobat VHDL 4.0, cunoscut ca VHDL 2008. Astfel, la propunerea înaintată de Accellera, în ianuarie 2009 a fost aprobat și publicat Standardul IEEE 1076-2008 VHDL.
Eforturile de îmbunătățire ale faciltăților oferite de VHDL pentru modelarea sincronizată în mediile de proiectare ASIC și FPGA sunt cunoscute în literatură sub denumirea de inițiativa VITAL (VHDL Initiative Toward ASIC Libraries). VITAL are librării care se aseamănă cu cele existente pentru modelarea sincronizată în Verilog HDL. Astfel, standardul VITAL (cunoscut ca standardul 1076.4) descrie metode de introducere a informațiilor de sincronizare necesare în crearea listelor de conexiuni, care conțin și informații referitoare la întârzieri, precum și facilități de descriere detaliată a circuitelor proiectate.
Limbajul Verilog este un alt limbaj de descriere hardware răspândit. Limbajul Verilog a fost creat de Phil Morby de la Automated Integrated Design Systems (redenumită apoi Gateway Design Automation – GDA) în anul 1984 ca un limbaj de modelare arhitecturală iar în anul următor a fost realizat primul simulator, extins substanțial până în 1987 și redenumit Verilog-XL. Verilog a împrumutat mult de la limbajele existente, ca de exemplu: aspectele referitoare la concurență de la Modula și Simula, sintaxa de la C și metodele de combinare a nivelurilor de abstractizare de la HiLo (Brunnel University, UK). Limbajul nu era standardizat și a suferit multe modificări până în 1990. În momentul în care Cadence a inițiat Open Verilog International (OVI) și a invitat mai multe companii mici să contribuie la realizarea unui simulator, Verilog nu a mai fost produs al unei firme. În anul 1991 documentația pentru Verilog HDL a devenit publică. OVI a dus o muncă laborioasă de îmbunătățire a manualului de referință a limbajului (LRM – „Language Reference Manual”) și în anul 1994, grupul de lucru IEEE 1364 a transformat OVI LRM în standard IEEE. Astfel, în 1995, Verilog-HDL a devenit standard comercial IEEE-1364, fiind referit ca Verilog-95. Standardul combina atât sintaxa limbajului Verilog, cât și PLI intr-un singur volum. În următorii ani au fost adăugate noi caracteristici iar noua versiune a limbajului a devenit standard IEEE 1364-2001 sau Verilog-2001. Prin îmunătățiri ulterioare, printr-un proiect separat System Verilog, limbajul a devenit standard IEEE 1364-2005 sau Verilog-2005. Prin includerea suportului de modelare analogice și mixte, limbajul a fost referit ca Verilog-AMS. În anul 2005 Co-Design Automation Inc a dezvoltat un limbaj de verificare de nivel înalt numit Superlog; acest limbaj a fost donat către Accellera, care l-a transformat în System Verilog, devenind standard IEEE P1800-2005 complet aliniat cu Verilog-2005.
În cadrul acestei cărți va fi descris modul de proiectare in limbajul VHDL prin numeroase exemple explicate folosind pachetul Foundation Express al firmei Xilinx.
2.2. Caracteristici ale limbajului VHDL
VHDL este un limbaj de programare care a fost proiectat și optimizat pentru a descrie comportarea sistemelor și circuitelor digitale. VHDL a fost conceput pentru a îndeplini o serie de cerințe. În primul rând, permite descrierea structurii unui circuit, adică modul de descompunere a acestuia în subcircuite și modul de interconectare al acestora. În al doilea rând, permite specificarea funcțiilor circuitului prin utilizarea unor expresii specifice unui limbaj de programare și nu în ultimul rând, ca rezultat al celor spuse mai sus, permite simularea circuitului înainte ca acesta să fie fabricat. În acest fel proiectantul va putea compara diverse variante ale circuitului, le va putea testa din punct de vedere al corectitudinii și va putea elimina costurile și întârzierile datorate trecerii prin faza de realizare a prototipului.
Comparând limbajul VHDL cu alte limbaje de programare sau cu limbajul concurent Verilog, se remarcă dezvoltarea unui concept unic, cel al unității de proiectare, care oferă posibilități avansate de management al configurației. Numite uneori și “library units”, unitățile de proiectare în VHDL sunt segmente de cod VHDL care pot fi compilate separat și memorate în biblioteci. Există cinci tipuri de unități în VHDL, și anume: entitatea, arhitectura, package, package body și configurația, despre care vom vorbi în următorul capitol al cărții.
VHDL permite multe stiluri de descriere a unei scheme. Acestea diferă în primul rând prin apropierea de hardware-ul utilizat și prin nivelurile de abstracție posibile (figura 1.1). Nivelul de abstracție arată cât de departe este descrierea schemei de o realizare hardware.
Figura 2.1. Niveluri de abstracție
În figura 1.1 sunt indicate diferitele puncte, din cadrul unei proiectări de tip “top-down”, ale celor trei niveluri generale de abstracție. Să începem de sus în jos. Să presupunem că o exprimare umană de genul “datele comprimate de la ieșirea chip-ului DSP trebuie analizată și memorată în intervalul de 70 ns a semnalului de strobe asociat …” trebuie să se regăsească într-o descriere care poate fi simulată. Un “testbench” scris în paralel cu descrierea secvențială este o astfel de expresie a schemei. Acestea sunt toate puncte în nivelul comportamental al abstractizării. După această simulare inițială, schema va trebui scrisă astfel încât să poată fi prelucrată de instrumentele de sinteză VHDL. Sinteza este un proces de translatare a unui concept abstract într-o formă mai puțin abstractă. Cel mai înalt nivel de abstracție acceptat de instrumentele de sinteză este nivelul “flux de date”. Nivelul de abstracție “structură” este nivelul în care se fac conexiunile între părțile mai mici ale circuitului în scopul obținerii unei forme mai mari a circuitului. Informațile fizice reprezintă nivelul de bază a abstractizării, care însă nu face obiectul VHDL-ului. Acest nivel implică specificarea interconexiunilor tranzistorilor unui chip, plasarea și rutarea macrocelulelor din cadrul unei matrici de porți sau FPGA (Field Programable Gate Array), etc.
Pentru a exemplifica cele trei niveluri de abstracție să considerăm un controller complex. La cel mai mic nivel de abstracție (structură), se pot utiliza facilitățile ierarhice ale VHDL-ului pentru a realiza conectarea secvențelor predefinite ale porților logice și bistabilelor și a forma circuitul complet. Pentru a descrie același circuit la un nivel de abstactizare “flux de date”, se descrie logica combinațională a controller-ului (decodificarea intrărilor și logica tranziților) utilizând funcții logice boleene de nivel înalt și se încarcă apoi ieșirile logicii respective într-un set de registre corespunzătoare tehnologiei utilizate. La nivelul comportamental de abstracție, se poate ignora tipul circuitelor în care se face implementarea (și cerințele instrumentelor de sinteză), în schimb se descrie modul de operare al controller-ului în timpca răspuns la diversele tipuri de stimuli
2.3. CONCEPTE DE BAZĂ ÎN VHDL
Limbajul VHDL are la bază conceptul de unitate de proiectare. Unitățile de proiectare în VHDL sunt segmente de cod VHDL, care pot fi compilate separat și memorate în biblioteci. Există cinci tipuri de unități în VHDL, și anume: entitatea, arhitectura, package, package body și configurația. Entitatea și arhitectura sunt singurele unități de proiectare pe care trebuie să le conțină orice descriere VHDL; package-urile și configurațile sunt opționale. Relația dintre aceste cinci unități de proiectare este ilustrată în figura 2.1.
Figura 2.2. Unitățile de proiectare VHDL
Abstractizarea hardware a sistemului digital modelat poartă denumirea de entitate (entity). Limbajul VHDL conține patru elemente de bază care permit descrierea unui sistem digital. Aceste elemente de bază sunt:
entitatea (entity) – este interfața cu alte sisteme sau componente,
arhitectura (architecture) – reprezintă implementarea funcționării sistemului modelat, permițând de asemenea specificarea unor conexiuni cu alte entități,
configurații (configuration) – asigură legătura unei entități cu o anumită arhitectură și
pachete (package) – sunt colecții de declarații utilizate în unul sau mai multe sisteme modelate.
Pe parcursul acestui capitol vor fi prezentate exemple care să permită o însușire cât mai corectă a acestor noțiuni.
Exemplu de descriere a unui comparator pe 8 biți
În acest paragraf este prezentat un exemplu simplu de circuit combinațional, un comparator pe 8 biți, cu scopul de a arăta cât de ușor poate fi modelată o schemă cu porți logice utilizând o singură instrucțiune VHDL. Schema bloc a circuitului este prezentată în figura 2.2.
Figura 2.3.. Schema bloc a comparatorului pe 8 biți
Acest circuit combinațional are două intrări de 8 biți (A[8] și B[8]) pe care le compară și o ieșire care returnează un rezultat (EGAL) pe un bit, indicând rezultatul comparării (1 dacă valorile de pe cele două intrări sunt egale și 0 dacă acestea sunt diferite).
Un astfel de comparator poate fi construit cu porți XOR sau utilizând alte circuite, în funcție de caracteristicile tehnologiei utilizate. Utilizând limbajul VHDL, se poate observa că o schemă cu porți logice poate fi modelată cu ajutorul unei singure instrucțiuni care utilizează operatorii proprii ai limbajului.
Descrierea comparatorului
VHDL conține multe caracteristici corespunzătoare limbajelor de înalt nivel, caracteristici care permit descrierea funcțiilor logice combinaționale – ca de exemplu cea a unui comparator. Codul VHDL care descrie comparatorul este următorul:
– Comparatorul pe 8 biți
–entity comparator is
port (A,B: in bit_vector(0 to 7);
EGAL: out bit
);
end comparator;
architecture comparator_arch of comparator is
begin
EGAL<='1' when (A=B) else '0';
end comparator_arch;
Privind cu atenție acest fișier sursă, putem sesiza următoarele elemente:
declarația entității – unde sunt definite intrările și ieșirile, porturile circuitului;
declarația arhitecturii – unde se descrie funcționarea circuitului, utilizând o singură instrucțiune.
Entități și arhitecturi
Orice circuit descris cu ajutorul limbajului VHDL conține cel puțin o pereche entitate/arhitectură. În VHDL entitatea descrie circuitul așa cum apare el din exterior, din punct de vedere al intrărilor și ieșirilor. Entitatea este similară unui simbol bloc, cu pini de intrare și de ieșire.
Cea de a doua componentă a perechii entitate/arhitectură este arhitectura. Aceasta descrie funcționarea entității de care este legată.
Declararea entității
În cadrul entității sunt enumerate toate semnalele de intrare și de ieșire ale circuitului, prezentându-se astfel interfața circuitului. În entitate sunt prezentate toate informațiile (număr de intrări, ieșiri și tipul acestora) de care este nevoie pentru a include circuitul într-o structură mai amplă sau pentru a proiecta stimulii de test. Modul în care operează circuitul nu este prezentat în arhitectură.
Pentru circuitul comparator, entitatea se declară astfel:
entity comparator is
port (A,B: in bit_vector(0 to 7);
EGAL: out bit
);
end comparator;
Se poate observa că entitatea include numele, comparator, și definirea tuturor intrărilor și ieșirilor. Lista porturilor cuprinde: A, B și EGAL. Fiecare port are atribuită o direcție – care poate fi in pentru intrări, out pentru ieșiri sau inout pentru porturile bidirecționale – și un tip de date – în acest caz: bit_vector(0 to 7), ceea ce înseamnă că este vorba de un vector de 8 biți, iar ieșirea bit este doar o valoare binară. Există desigur mai multe tipuri de date disponibile în VHDL, dar acestea constituie obiectul discuției în capitolul 3.
Declararea arhitecturii și corpul acesteia
Cea de a doua parte a codului VHDL este arhitectura. Fiecare entitate trebuie să conțină cel puțin o arhitectură. Arhitectura din codul corespunzător comparatorului din exemplul anterior este:
architecture comparator_arch of comparator is
begin
EGAL<='1' when (A=B) else '0';
end comparator_arch;
Arhitectura începe cu un nume unic, comparator_arch, urmat de numele entității pe care o descrie și de care este legată. În cadrul arhitecturii, între cuvintele cheie begin și end se găsesc instrucțiunile care descriu funcționarea circuitului comparator. Se observă că o singură instrucțiune permite descrierea comparatorului. Această instrucțiune face parte din categoria instrucțiunilor concurente, fiind o atribuire condiționată. Această atribuire specifică că ieșirea EGAL ia valoarea '1' când A și B sunt egale și valoarea '0' când sunt diferite.
Există și alte instrucțiuni care permit descrierea acestui circuit. Se va vedea pe parcursul acestei lucrări că limbajul VHDL dispune de diferite tipuri de instrucțiuni concurente, care permit descrierea unor arhitecturi complexe. Ierarhiile și subprogramele permit realizarea componentelor de bază ale sistemului modelat iar instrucțiunile puternice ale limbajului, cum ar fi procesele, permit descrierea logicii secvențiale.
Dezvoltarea aplicației
Am prezentat în primul capitol conceptele generale despre acest joc. În acest capitol, o să prezint cum se crează un astfel de joc, pentru a ne putea juca singuri, fără a merge în casinouri. Deși în primul capitol am precizat că în jurul mesei se așează mai mulți jucători, dar dacă ne gândim logic, nu există nici o legătură între jucători, deci totul se rezumă la o ruletă și un jucător, deci nu are rost să creăm un program pentru mai mulți utilizatori simultan.
Limbaje de programare
Un asemenea joc se poate realiza foarte ușor folosind un singur program numit Visual Studio de la firma Microsoft. Eu am folosit cea mai nouă versiune disponibil la această vreme, adică Microsoft Visual Studio 2010 Professional. Limbajul de programare folosit este C#, iar template-ul folosit este Windows Forms Application.
Pentru acest joc am mai folosit un alt program de la Microsoft numit SQL Server Management Studio deoarece am dorit ca jocul să fie pe bază de identificare, iar banii pe care îi are utilizatorul de program să fie salvate chiar și după închiderea jocului fără să se piardă aceste sume. Pentru a gestiona o bază de date, limbajul folosit este SQL (Structured Query Language).
C# este cel mai utilizat limbaj de programare oriantat pe obiecte și a fost conceput de Microsoft la sfârșitul anilor 90 pentru a fi o concurentă serioasă pentru limbajul Java. Acest limbaj este derivat din limbajul C++ și aduce multe îmbunătățiri față de predecesorul său.
SQL ( Structured Query Language ) este principalul limbaj de programare folosit pentru manipularea datelor în bazele de date relaționale. Cu ajutorul acest limbaj se pot crea, însera, șterge, actualiza sau relaționa date care se află într-o bază de date.
Clase. Obiecte. Proprietăți.
Cum am prezentat în subcapitolul anterior, limbajul de programare C# este orientat pe obiectși aduce o serie de avantajoase față de limbajele din care este derivat, adică limbajele C și C++. Probabil cel mai mari avantaje sunt reprezintate de clasele, obiectele și metodele care sunt deja create implicit.
Să începem cu o clasă importantă, practic scheletul platformei Windows Forms Application, clasa Form. Această clasă este foarte importantă deoarece este baza pe ce se clădește aspectul vizual al unui program construit în Windows Forms Application. Peste clasa Form se pot atașa o serie de alte clase predefinite pentru a crea un aspect plăcut programului pe care îl creăm. Fie că vorbim despre metoda drag&drop, fie că vrem să le creăm dinamic, clasele pe care le putem atașa sunt cele din opțiunea Toolbox. Cele mai folosite clase din Toolbox sunt Button, CheckBox, Label, ListBox. PictureBox, ProgressBar, Textbox, Panel, ColorDialog, Chart și multe altele. Dacă folosim programarea dinamică, este obligatoriu să instanțăm aceste obiecte. În continuare o să prezint clasele,obiectele, proprietățile folosite…
Cea mai folosită clasă de către mine în acest joc a fost clasa Button. Cu ajutorul acestei clase am creat majoritatea elementelor vizibile din joc. Am creat în mod dinamic toate câmpurile în care se pot pune pariuri (toate câmpurile cu numere, pariurile simple, dar și duzinele sau pariurile speciale), buton care deschide un document cu regulamentul, alt buton pentru deschiderea unor alte aplicații din interiorul jocului cum ar fi alegerea culoarea fundalului jocului sau o formă în care sunt deschise istoricul jocurilor anterioare ale utilizatorului, ștergerea contului pentru o sumă eronată pe care până la urmă nu dorim să pariem și butonul care închide jocul.Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit), BackColor (culoare fundal), Name (dacă dorim să asociem un nume), Font(dacă dorim ca scrisul să fie de o anumită marime sau stil), ForeColor (pentru culoarea scrisului), Text(textul care dorim să fie afișat), TextAlign(cum să fie aliniat textul) și BackgroundImage (dacă dorim să aibă imagine de fundal).
O altă clasă foarte utilizată de mine este clasa Label. Această clasă este asemănătoare clasei Button, diferența este că în cazul butonului, dacă, punem mouse-ul deasupra lui, acesta oarecum își schimbă aspectul, lucru ce nu se întâmplă în cazul folosirii clasei Label. Labelurile se folosesc atunci când dorim ca un obiect să fie stabil și când nu dorim ca acest obiect să fie accesat prin click sau dublu-click. Am folosit label-uri pentru a afișa diferite informații cum ar fi unde trebuie utilizatorul să se autentifice sau să creeze un cont nou, un câmp care îndrumă utilizatorul în timpul jocului și mai multe câmpuri de salut la finalul jocului. Un alt set de labeluri sunt create pentru a marca marginea mesei de joc. Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit), BackColor (culoare fundal), Name (dacă dorim să asociem un nume), Font(dacă dorim ca scrisul să fie de o anumită marime sau stil), ForeColor (pentru culoarea scrisului), Text (textul care dorim să fie afișat)șiTextAlign(cum să fie aliniat textul).
TextBox-ul este o clasă în care utilizator comunică direct cu jocul. Deobicei un textbox este folosit pentru a vedea care sunt opțiunile utilizatorului (de exemplu, suma cu care dorește să inceapă un cont utilizatorul) sau la autentificare. Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit), Font(dacă dorim ca scrisul să fie de o anumită marime sau stil), ForeColor (pentru culoarea scrisului), Text (textul care dorim să fie afișat), TextAlign (cum să fie aliniat textul)și PasswordChar (folosit la ascunderea parolelor).
PictureBox, cum îi spune și numele, este e o clasă care ne ajută să creăm un spațiu pentru imagini. Am folosit această clasă pentru a poziționa ruleta și pentru jetoane. Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit), SizeMode (pentru modul în care dorim să arate imaginea), Image (pentru a specifica imaginea dorită), Name (dacă dorim să asociem un nume), DisplayRectangle (pentru a afișa forma imaginii)șiRegion (dacă dorim să aibă formă diferită imaginea).
Bitmap este o clasă care este ca o pereche pentru clasa PictureBox. Principala sa funcție este de a manevra cu imaginile dintr-un PictureBox. Eu am folosit această clasă pentru a salva o imagine pentru a putea fi refolosită mai târziu și pentru a putea roti ruleta. O proprietate pe care am folosit la rotirea ruletei este RotateFlip.
Panel, asemănător PictureBoxului, este e o clasă care ne ajută să creăm un spațiu pentru imagini. Diferența se manifestă prin faptul că panel se folosește mai mult când nu se lucrează cu imagini sofisticate ci cu diferite desene. Eu am folosit această clasă pentru a da posibilitatea utilizatorului de a-și alege culoarea de fundal a mesei de joc. Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit) și BackColor (pentru culoarea de fundal).
ColorDialog, este o clasă care este o interfață între utilizator și joc. Aici practic, utilizator poate stabili culoarea de fundal cu care dorește să înceapă jocul. În cazul în care utilizatorul nu găsește culoarea dorită, o poate crea chiar el. Proprietatea care deschide acest dialog se numește ShowDialog. Evident, cea mai importantă proprietate pentru această clasă este cea Color.
Color poate fi utilizată ca o clasă separată dar și ca o proprietate la alte clase care lucrează cu culori. Este una din cele mai folosite clase în Windows Forms Application. Această clasă conține ca proprietăți toate culorile predefinite de Visual Studio.
Timer este o clasă importantă în cazul în care dorim ca programul nostru să aibă un aspect dinamic, evoluând în timp, să ne ofere mișcări ale altor obiecte pe forma în care lucrăm. Am folosit această clasă pentru a fi vizibilă rotirea ruletei câteva secunde. Orice program inteligent are nevoie de cel puțin un timer. Printre proprietățile acestei clase putem enumera Enabled (pentru a putea fi accesat) și Interval (pentru a specifica cu exactitate intervalele cu care dorim să facem un refresh al unei obiecte din program).
Random este o clasă care ne ajută să generăm numere aleatoare, independente unele de altele dându-i intervalul în care dorim să obținem aceste numere. Principalul său rol la acest joc era să îmi genereze independent numărul câștigător al ruletei.
ProgressBar este folosit pentru a evidenția utilizatorului cât mai are de așteptat până când un eveniment se va întâmpla. Deobicei, aceste Progressbar-uri sunt folosite la browsere de internet pentru a arăta utilizatorului de browser în ce stadiu se află încărcarea paginii dorite. Eu am folosit pentru a arăta utilizatorului cât mai are de așteptat până apare numărul câștigător. Printre proprietăți putem enumera Size (pentru mărime), Location (pentru poziția în formă), Parent (care form este folosit), Value (valoarea din interiorul lui), Minimum (marginea inferioară) și Maximum (marginea superioară).
List este și ea o clasă extrem de des folosită. Această clasă ne permite să creăm niște liste în care avem variabile, fie de aceeași tip, fie de tipuri diferite. Am folosit aceste liste în vederea salvării rezultatelor din bazele de date.
Size este o clasă care este construit pentru a indica exact dimensiunile unui obiect. Dar ca aceasta să funcționeze corect, programatorul trebuie să indice cele două valori, respectiv lungimea și înălțimea obiectului. Eu am folosit această clasă la fiecare obiect creat dinamic.
Point este clasa care indică cu precizie chirurgicală punctul stânga sus al obiectului. Dar ca aceasta să funcționeze corect, programatorul trebuie să indice cele două valori, respectiv cele două coordonate (dar să nu uitam că în Windows Forms Application coordonata 0,0 este punctul cel mai stânga și cel mai sus posibil) . Eu am folosit această clasă la fiecare obiect creat dinamic.
Font este clasa care are aspectul oricărui text. Cu ajutorul acestei clase putem să mărim sau să micșorăm scrisul din obiecte sau să dăm alt stil în care să fie afișat. Deobicei această clasă este folosită împreună cu o altă clasă numită FontFamily care are inclusă toate formele în care poate apărea un text pe un obiect.
ContentAligment respectiv HorizontalAligment sunt două clase care indică poziția textului într-un obiect. Până când ContentAligment este folosită la labeluri și la butoane, HorizontalAligment poate fi folosită doar la textboxuri. Valorile care pot apărea la ContentAligment sunt TopLeft, TopCenter, TopRight,MiddleLeft, MiddleCenter, MiddleRight, BottomLeft, BottomCenter și BottomRight iar la HorizontalAligment sunt Left, Center și Right.
Pentru folosirea unei baze de date într-un program construit în Windows Forms Application avem nevoie de o mulțime de clase care au rolul de a gestiona interogările din tabele. Aceste clase predefinite sunt incluse în fișierul System.Data.SqlClient pe care suntem obligați să declarăm la începutul programului. Aceste clase sunt: SqlConnection care are rolul de a se conecta la o bază de date, SqlCommand are rolul de reține o comandă SQL, SqlDataReader are rolul de a citi datele din bazele de date și DataTable pentru a reține datele într-un tabel și DataColumn pentru a reține datele în coloane.
Clasele EventHandler si EventArgs are rolul de a preia și de a trasmite parametrii la evenimente, clasa MessageBox este utilizat când vrem să afișăm un mesaj fără ca utilizatorul să poată scăpa de el iar RotateFlipType are rolul de a roti imaginile. RotateFlipType are și câteva proprietăți cum ar fi să ai dreptul să pui o imagine în oglindă, dar putem și regla gradele cu cât dorim să rotim această imagine).
Am creat și eu o clasă pentru ca datele să fie transmise de la o formă la alta. Această clasă se numeste AppEngine și am reținut datele referitoare la scorul actual pe care are utilizatorul, numele utilizatorului, scorul final și culoarea de fundal al mesei. Alte două clase pe care le-am creat, și anume User și Afișare au rolul reține datele extrase din tabelele din bazele de date.
Evenimente. Metode. Constructori.
Gestionarea evenimentelor în Master Page este foarte importantă. Orice acțiune a utilizatorului în timp ce folosește jocul poartă numele de eveniment. Deoarece este un joc în care utilizarea tastaturii este foarte rară, avem de a face cu utilizarea foarte frecventă a mouse-ului. Cum ați bănuit, evenimentul cel mai folosit în acest joc este click-ul.
Evenimentul click este folosit pe tot parcursul jocului. Practic, și când deschidem programul dăm un click pe fișierul executabil și închidem tot cu un click pe butonul de Close a programului. Dar în afară de aceste lucruri elementare, click-ul este folosit în fiecare moment al aplicației. Dacă avem cont, atunci după ce inserăm datele, apasând click-ul ajungem la masa de joc. Dar putem opta și pentru a crea un nou cont, de a citi regulamentul sau de a schimba culoarea de fundal a mesei de joc apasând pe butonul corespunzător.
Ajungând la masa de joc, putem observa cum apar o sumedenie de obiecte care doar cu ajutorul click-ului pot răspunde comenzilor dorite de utilizator. Ca să selectăm miza dorita este obligatorie click-ul pe jetoane, ca să selectăm pariul dorit este obligatorie click-ul pe butonul corespunzător mizei iar pentru a porni ruleta este obligatorie apăsarea cu un click a ruletei. Evident, dacă dorim să primim niște statistici, dorim să anulăm o eventuală miză sau dorim să ieșim din joc trebuie să apăsăm pe butonul corespunzător dorinței noastre.
Două evenimente total opuse la prima vedere, lucrează aproape în același timp. Este vorba de evenimentele MouseHover și MouseLeave. Cele două nu pot fi independente unele de altele, deoarece dacă punem mouse-ul pe un obiect care are implementat un MouseHover atunci inevitabil odată și odată tot trebuie să mutăm mouse-ul de pe obiect, ceea ce crează deja o altă acțiune. Aceste două evenimente am folosit în două locuri. Prima oară, le-am utilizat pentru a evidenția labelul „Cont nou” și „OK” cu o culoare diferită de culoarea din imagine. Celălalt loc unde am folosit a fost prognoza câmpurilor în eventualitatea ieșirii unui număr norocos prin a arăta banii pe care ar putea utilizatorul câștiga în acel caz. Evident, aceste lucruri sunt în momentul punerii mouse-ului pe obiectul respectiv, deci intră în rol evenimentul MouseHover, iar la îndepărtarea mouse-ului totul se reia cum a fost inițial, adică intră în rol evenimentul MouseLeave.
Mai există un eveniment care nu are nicio legătură cu mouse-ul. Acest eveniment se numește Tick și provine din folosirea unui obiect de tip Timer. Acest eveniment nu face altceva decât repetă un anumit cod, ca și cum ar fi o funcție recursivă, diferența dintre cele două este faptul că un Tick se repetă la un interval de timp specificat de utilizator. Acest eveniment am folosit la rotirea ruletei pentru câteva secunde.
La capitolul funcții nu stăm așa bine. Limbajul de programare C# este atât de evoluat în momentul actual încât rareori avem șansa de a a vea nevoie de crearea unei noi funcții. Din fericire pentru mine ca programator, nu am avut nevoie de crearea unor noi funcții, doar să utilizez cât mai bine funcțiile, evenimentele și clasele predefinite deja de Windows Forms Application.
Totuși, ar trebui să amintim câteva din funcții (numite metode) care sunt gata implementate deja în program. Orice formă începe cu public și numele formei urmat cu o funcție numită InitializeComponents. Această funcție, cum îi spune și numele, are rolul de a inițializa toate obiectele și componentele necesare pentru o formă. O altă funcție asemănătoare este cea de Load. Această funcție se apelează în momentul în care o formă apare pe ecran. Și când implementăm un eveniment , gen click, automat se crează o funcție în interiorul programului.
Orice funcție trebuie să aibă și un cuvânt cheie care ne arată ce fel de funcție este. Majoritatea funcțiilor din interiorul programului sunt de tip void, care nu returnează nimic. Dar există și funcții care returnează, cum ar fi cele de tip int, char, float etc. Dacă dorim ca o funcție să fie accesată și în interiorul altui eveniment sau alt program trebuie să scriem cuvântul cheie „public” înainte funcției. În caz contrar, punem „protected” sau „private”.
În limbajele de programare care au fost înainte de C#, o funcție la apelare trebuia să aibă obligatoriu același număr de parametri (și de același tip) ca și construirea funcției. Paradoxal, în C# acest lucru poate fi evitat. Funcțiile sunt create în funcție de numărul și tipul parametrilor. Asemenea funcții poartă numele de constructori. Aceste funcții sunt utilizate des când dorim să localizăm un obiect sau să îi specificăm dimensiunile obiectului.
Baza de date
În realizarea acestui program, am folosit și o bază de date, numită sugestiv „Disertatie”. Această bază de date cuprinde două tabele, un tabel pentru utilizatori și un tabel pentru teste de tip grila, fiecare tabel având numele definit așa.
Primul tabel denumit ”Utilizator” are rolul de a reține informațiile despre utilizatori. Acest tabel cuprinde următoarele câmpuri: Username pentru numele utilizatorului, Password pentru parolă și Function pentru funcția pe care are utilizator îl are (profesor/elev) . În acest tabel sunt reținuți toți cei care au dreptul de utilizare al acestui program.
Al doilea tabel denumit ”Teste” este mult mai voluminos. Acest tabel cuprinde 6 câmpuri. Un câmp este de tip ”text” și are rolul de reține întrebarea. Apoi urmează 4 câmpuri cu variantele de răspuns și ultimul câmp este răspunsul corect care este indicat printr-o cifra simbolizând a câtelea câmp este varianta corectă.
Manualul programatorului
4.1. Master Page
În asp.net ”Master Page” este principalul fisier. Aici sunt adunate toate informațiile despre pagina web: cum ar fi structura paginilor, structura meniului principal dar și fișierele de tip script (javascript) care sunt introduse in proiect.
Fișierele de tip javascript care sunt incluse în proiect sunt următoarele și se includ astfel:
<body>
<form runat="server">
<asp:ScriptManager runat="server">
<Scripts>
<%–Framework Scripts–%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="jquery.ui.combined" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
<asp:ScriptReference Name="WebFormsBundle" />
<%–Site Scripts–%>
</Scripts>
</asp:ScriptManager>
În meniul principal ni se arată care sunt paginile importante din acest proiect. Dând click pe ele ni se deschid paginile pe care dorim să le vizualizăm. Paginile sunt numite sugestiv ca utilizatorul să știe exact unde ajunge dând click pe ele. Acestea sunt:
Acasă
Despre VHDL
Cursuri
Teste
Contact
Logare
Înregistrare
Crearea lor se face în felul următor:
<div class="float-right">
<section id="login">
<asp:LoginView runat="server" ViewStateMode="Disabled">
<AnonymousTemplate>
<ul>
<li><a id="registerLink" runat="server" href="~/Account/Register.aspx">Inregistrare</a></li>
<li><a id="loginLink" runat="server" href="~/Account/Login.aspx">Logare</a></li>
</ul>
</AnonymousTemplate>
<LoggedInTemplate>
<p>
Hello, <a runat="server" class="username" href="~/Account/Manage.aspx" title="Manage your account">
<asp:LoginName runat="server" CssClass="username" /></a>!
<asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" />
</p>
</LoggedInTemplate>
</asp:LoginView>
</section>
<nav>
<ul id="menu">
<li><a runat="server" href="~/">Acasa</a></li>
<li><a runat="server" href="~/About.aspx">Despre VHDL</a></li>
<li><a id="A1" runat="server" href="~/Cursuri.aspx">Cursuri</a></li>
<li><a id="A2" runat="server" href="~/Teste.aspx">Teste</a></li>
<li><a runat="server" href="~/Contact.aspx">Contact</a></li>
</ul>
</nav>
</div>
Dacă dorim să vedem să facem un management al paginii trebuie să apasăm pe butonul ”Design” și putem observa cum arată paginile cu aceste setări pe care le-am realizat. Menționez că arată doar cum este împărțită rădăcina paginilor nu și conținutul lor.
4.2. Algoritmi de comunicare cu baza de date
Orice aplicație modernă deja cere baza de date. Comunicarea cu această bază de date nu întotdeauna este ușoară. Din păcate Microsoft Visual Studio nu are o funcție clară predefinită care să facă legătura cu aceste baze de date, indiferent dacă e vorba de Management Studio, adică MSSQL sau de servere de tip MySQL cum ar fi WAMP sau XAMP.
O să vă prezint în acest subcapitol o modalitate de a extrage informații dintr-o bază de date. În această aplicație am creat o pagină pentru teste unde studenții își pot verifica cunoștințele, dar pentru a fi mai complicat din punct de vedere informatic, am făcut ca întrebările să vină din dintr-un tabel, dar fiind și test grilă, în tabel sunt arătate și 4 variante din care doar una este corectă. Deși în algoritmii anteriori am folosit doar HTML și CSS aici folosesc doar C#. Crearea unei asemenea pagini arată în felul următor:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
namespace Disertatie
{
public partial class WebForm2 : System.Web.UI.Page
{
private MySqlConnection connection;
private string server;
private string database;
private string uid;
private string password;
List<string>[] list = new List<string>[6];
int numarintrebare = 0;
int count = 0;
protected void Page_Load(object sender, EventArgs e)
{
Initialize();
Fragen(0);
}
//Initialize values
private void Initialize()
{
server = "localhost";
database = "disertatie";
uid = "root";
password = "";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" +
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
string query = "SELECT * FROM intrebari";
//Create a list to store the result
list[0] = new List<string>();
list[1] = new List<string>();
list[2] = new List<string>();
list[3] = new List<string>();
list[4] = new List<string>();
//Open connection
if (this.OpenConnection() == true)
{
//Create Command
MySqlCommand cmd = new MySqlCommand(query, connection);
//Create a data reader and Execute the command
MySqlDataReader dataReader = cmd.ExecuteReader();
//Read the data and store them in the list
while (dataReader.Read())
{
list[0].Add(dataReader["intrebare"] + "");
list[1].Add(dataReader["raspuns1"] + "");
list[2].Add(dataReader["raspuns2"] + "");
list[3].Add(dataReader["raspuns3"] + "");
list[4].Add(dataReader["raspuns4"] + "");
count++;
}
}
}
//open connection to database
private bool OpenConnection()
{
try
{
connection.Open();
return true;
}
catch (MySqlException ex)
{
//When handling errors, you can your application's response based
//on the error number.
//The two most common error numbers when connecting are as follows:
//0: Cannot connect to server.
//1045: Invalid user name and/or password.
Response.Write(ex.Number);
switch (ex.Number)
{
case 0:
Response.Write("Nu ne putem conecta la sistem. Solicitati ajutorul administratorului");
break;
case 1045:
Response.Write("Nume utlizator gresit sau parola gresita, va rugam sa mai incercati");
break;
}
return false;
}
}
//Close connection
private bool CloseConnection()
{
try
{
connection.Close();
return true;
}
catch (MySqlException ex)
{
Response.Write(ex.Message);
return false;
}
}
//Insert statement
public void Insert()
{
Random r = new Random(50);
Response.Write(r);
string query = "INSERT INTO test (testcoloana) VALUES('" + r + "')";
//open connection
if (this.OpenConnection() == true)
{
//create command and assign the query and connection from the constructor
MySqlCommand cmd = new MySqlCommand(query, connection);
//Execute command
cmd.ExecuteNonQuery();
//close connection
this.CloseConnection();
}
else
{
Response.Write("Nereusit");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (numarintrebare < count)
{
Fragen(numarintrebare);
}
else
{
Label1.Dispose();
RadioButton1.Dispose();
RadioButton2.Dispose();
RadioButton3.Dispose();
RadioButton4.Dispose();
Response.Write("TESTUL S-A TERMINAT");
}
}
public void Fragen(int numarulintrebarii)
{
Label1.Text = list[0][numarulintrebarii];
RadioButton1.Text = list[1][numarulintrebarii];
RadioButton2.Text = list[2][numarulintrebarii];
RadioButton3.Text = list[3][numarulintrebarii];
RadioButton4.Text = list[4][numarulintrebarii];
numarintrebare = numarintrebare + 1;
}
}
}
4.3. Algoritmi speciali
Manualul utilizatorului
În acest capitol o să se prezint cum se utilizează acest program într-un mod în care orice persoană să îl poată utiliza, indiferent de gradul de cunoștințe PC ale utilizatorului. O să prezint și o serie de print screen-uri pentru ca utilizatorul să vadă clar ce are de făcut în fiecare moment al utilizării programului.
Deschiderea programului
În mod normal un program făcut în Visual Studio se deschide de la un fișier executabil (care are extensia .exe). Dacă însă acest executabil nu există, trebuie să-l deschidem cu ajutorul Visual Studio-ului. Deoarece acest joc îmi este lucrarea de disertație, l-am botezat sugestiv Disertatie.
Program prin acest mod se deschide astfel: apăsăm butonul START din stânga-jos a ecranului sau tasta Windows existent pe tastatură și punem cursorul pe Microsoft Visual Studio și în lista creată căutăm Disertatie. Dacă nu există, dăm click unde e scris Visual Studio și în programul ce se deschide dăm click pe Open Project și căutăm programul dorit. Indiferent care soluție alegem, apăsăm combinația CTRL+F5 și ni se deschide aplicația.
Figura nr. 5.1. Pornirea programului
Autentificarea și crearea de cont
Pentru a beneficia de toate facilitățile de care dispune această pagină web trebuie să ne logăm. Însă înainte de a ne loga, trebuie să avem o cont de utilizator și un parolă pe care doar noi să o știm.
Pentru a ne facem un cont trebuie să apăsăm pe butonul Înregistrare situat pe partea de dreapta-sus a paginii. Acolo vom întâmpina următoarea pagină:
Figura nr. 5.2. Inregistrare
Aici trebuie să completăm câmpurile care apar:
Nume utilizator
Adresa de e-mail
Parola
Confirmarea parolei
Trebuie să fim atenți când completăm aceste câmpuri deoarece au niște reguli. De exemplu câmpul de e-mail trebuie să conține neapărat caracterul ”@” și apoi urmat după câteva caractere de ”.” și de un nume de domeniu, de felul următor: [anonimizat]
Câmpul ”Parola” trebuie să conține minim 6 caractere și să corespundă cu câmpul ”Confirmare parola”, în caz contrar o să apară o eroare la apăsearea butonului de înregistrare.
În cazul în care deja avem un cont trebuie să apăsăm butonul ”Logare” și o să avem următoarea pagină:
Figura nr. 5.3. Logare
După logare cele două butoane se vor modifica în felul următor: din butonul Înregistare va fi un label pe care va fi scris ”Hello,” urmat de numele vostru de utilizator iar butonul de ”Logare” va fi evident buton de ”Delogare”.
Dacă dăm click pe numele nostru de utilizator putem edita profilul nostru. A edita profilul se referă că putem modifica parola, că altceva nu are rost. Deci o să avem următoarele câmpuri:
Parola curentă
Parola nouă
Confirmare parolă
Evident parola nouă trebuie să corespundă cu Confirmarea parolei și să aibă minim 6 caractere. Operațiune se termină apăsând pe butonul ”Schimbă parola”.
Figura nr. 5.4. Editare profil
Folosirea aplicației
Rulând aplicația se deschide pagina principală. Aici avem ocazia de a ne loga cum am prezentat în subcapitolul anterior.
Această pagină pe lângă zona unde ne putem loga mai conține și mesajul de întâmpinare al utlizatorului dar și linkurile utile la cele mai importante pagini din acest proiect.
Meniul principal este compus din 5 butoane care trimit la diferite pagini. Acestea sunt:
Acasa (pagina de start)
Despre VHDL
Cursuri
Teste
Contact
Pe fiecare pagină o să aveți ocazia de a vedea și logo-ul facultății.
Figura nr. 5.5. Pagina de start
Următoarea pagină este cea în care fac o scurtă prezentare a limbajului VHDL denumit ca ”Despre VHDL”. Această pagină este relativ simplă, apar doar forma clasică în care am structurat acest proiect cu partea albă sus cu meniurile, partea de albastru deschis în care este informația propriu-zisă și partea de albastru închis în care se vad niște informații despre data logării și titlul acestui program. Pe partea dreaptă mai apare o schema a limbajului VDHL.
Figura nr. 5.6. Despre VHDL
Următoarea pagină este foarte importantă. Aici, studenții vor putea accesa cursurile, să le descarce sau pur și simplu de a vedea niște tutoriale. Inițial am stabilit să fie 7 cursuri, dar acestea se pot mări după placul profesorului.
Fiecare curs are o pagină separată, un video separate și un titlu separat. Deoarece nu am putut găsi o soluție optimă în javascript că să nu trebuiască să creăm pentru fiecare curs în parte o nouă pagină, această soluție mi s-a părut cea mai ușoară. Astfel acest program se mai poate îmbunătăți pe viitor în acest sens, fapt ce voi menționa și la capitolul de concluzii finale.
O pagină de acest fel arată în felul următor:
Figura nr. 5.7. Cursuri
O altă pagină este cea în care putem afla contactele administratului de pagină. Aici putem următoarele informații:
Număr de telefon
Adresa
Hartă Google Maps cu locația
Arată în felul următor:
Figura nr. 5.8. Contact
Testarea studenților
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: E Learning. Aplicatie Pentru Invatare Asistata pe Calculator (ID: 120944)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
