Cum să-ți construiești proiectul
Introducere in programare
FII @ 2016
Pasul 1
?
Cuprins
- Descompunerea proiectului
- Proiectare
- Interfață
- Implementare
- Evaluare personală
- Prezentare
1. Descompunerea
Notă: Preferabil nu așa.
1. Descompunerea
- Specificații
- Funcționalități (Features)
- Posibile probleme în realizarea specificațiilor
1. Descompunerea
1.1 Specificații
1. Descompunerea
1.1 Specificații
Specificațiile reprezintă o descriere cât mai completă a aplicației ce urmează a fi construită.
Din această descriere, ar trebui să poată fi deduse foarte ușor scopul, nivelul de calitate al întregii aplicații, serviciile oferite și utilitatea lor, o listă de opțiuni principale.
1. Descompunerea
1.1 Specificații
Importanță: Foarte mare!
O aplicație nu ar trebui să fie dezvoltată fără o listă de specificații clară și bine pusă la punct.
Dezvoltarea fără specificații duce de cele mai multe ori la aplicații slab implementate, predispuse la vulnerabilități, forțate să respecte ideologia "Las' că merge ș-așa".
1. Descompunerea
1.2 Funcționalități (Features)
1. Descompunerea
1.2 Funcționalități (Features)
Specificațiile trebuie să conțină o listă de funcționalități pe care aplicația le va oferi.
Funcționalitatea unei aplicații trebuie să fie mereu legată și să respecte complet scopul acelei aplicații.
1. Descompunerea
1.2 Funcționalități (Features)
Exemplu negativ:
Jocul Mario care îți oferă și posibilitatea de a-i spune prăjitorului de pâine din bucătăria vecinului să facă clătite.
1. Descompunerea
1.2 Funcționalități (Features)
Exemplu pozitiv (glumesc):
1. Descompunerea
1.3. Posibile probleme în realizarea specificațiilor
Notă: Probabil geamul nu trebuia să crape
1.3. Posibile probleme în realizarea specificațiilor
Înainte de dezvoltarea proiectului, este recomandat să identificați posibilele probleme de implementare pe care le veți întâmpina.
Acest pas împiedică dezvoltarea unui proiect imposibil, care stagnează în mijlocul procesului de implementare și ajută și la dezvoltarea unei arhitecturi care să suporte lista de funcționalități.
2. Proiectare
2. Proiectare
2.1 Proiectare arhitecturală
Acest pas presupune să stabiliți modul în care interacționează modulele aplicației voastre între ele și cum comunică cu entități exterioare, acolo unde este cazul.
Acest pas este foarte important. O proiectare incoerentă logic duce la îngreunarea procesului de dezvoltare și apariția unor bug-uri neașteptate.
Notă: De parcă există bug-uri așteptate..
2. Proiectare
2.1. Proiectare arhitecturală
Un exemplu de diagramă UML de clase:
Fig. 2.1.1 - Exemplu de diagrama UML
2. Proiectare
2.1. Proiectare arhitecturală
Figura 2.1.1 descrie relațiile între clasele de obiecte dintr-o aplicație.
O scurtă explicație:
Un <Customer> lucrează direct doar cu un <Order>, dar nu și cu <Order Details>.
Mai multe detalii în anii următori... sau poate dacă întrebați maimuța pe care ați câștigat-o.
2. Proiectare
2.2. Modularizare
2. Proiectare
2.2. Modularizare
Modularizarea presupune împărțirea codului în module (clase, fișiere cu funcții, etc) astfel încât fiecare modul să aibă un scop precis.
Exemplu: Un fișier plin cu funcții care lucrează strict cu structura denumită "Maimuță".
Exemplu de funcții: spală_maimuța, hrănește_maimuța.
2. Proiectare
2.2. Modularizare
Modularizarea permite organizarea logică a codului sursă și încurajează lizibilitatea și coerența.
De asemenea, și lucrul în echipă este mai ușor (dacă programul vine cu o listă de specificații pentru fiecare modul).
Importanță: Foarte mare!
2. Proiectare
2.2. Modularizare
Sfat: Gradul de modularizare ar trebui să fie direct proporțional cu nivelul de complexitate a proiectului.
Exemplu negativ (overkill): Crearea unui modul ce afișează la ecran "Felicitări, ai câștigat o maimuță!".. și atât.
2. Proiectare
2.3. Proiectarea modului de interacțiune
Acest pas presupune stabilirea funcționalităților principale și modul în care acestea se execută atunci când utilizatorul interacționează cu aplicația voastră.
Ce se întâmplă când ceri o anumită funcționalitate?
2. Proiectare
2.3. Proiectarea modului de interacțiune
Did you press the button?
Exemplu negativ: Pentru fiecare apăsare de buton din aplicație, un pop-up cu următoarea întrebare..
3. Interfață
3. Interfață
Importanță: Foarte mare!
Modul în care un utilizator interacționează cu aplicația voastră este crucial.
Interfața aleasă (ex: consolă, aplicație desktop cu formulare, website, etc) trebuie să fie foarte strâns legată de scopul și publicul țintă al aplicației.
3. Interfață
Notă: Consola poate fi un mediu foarte plăcut
3. Interfață - cum să nu
3. Interfață
Aceasta trebuie gândită pentru a fi instinctivă d.p.d.v logic (intuitivă) și cât mai ușor de folosit.
4. Implementare
A.K.A. Partea în care te simți ca un "hacker" din cauza IDE-ul cu temă închisă la culoare și filmelor americane proaste.
4. Implementare
- Implementarea specificațiilor
- Modularizarea codului conform specificațiilor
- Documentarea codului
- Documentarea bug-urilor
- Respectarea unui standard de scriere
- Implementare lizibilă, coerentă
To do list:
4. Implementare
Implementarea trebuie să fie coerentă și să expună prin nume de variabile / module / clase / funcții cât mai mult din logica aplicației.
Importanță: Foarte mare! (no code, no Christmas present!)
4. Implementare
Caracteristici de urmărit:
- Ușurință în mentenanță
- Ușurință în adăugarea de funcționalități noi
- Eficiență
- Utilitatea implementării (poate fi refolosit codul?)
- Dificultate în utilizarea incorectă a codului
- Relevanță (codul vostru are rost?)
- Cost mic în dezvoltare (timp pierdut = cost mare)
4. Implementare - cum să nu
Cod pe care îl poți înțelege peste un an.
4. Implementare - cum să nu
Cod pe care îl poți înțelege peste un an.
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 42
4. Implementare - cum să nu
Documentarea asupra soluției unei probleme.
Cum să nu implementezi un vector:
int a1 = 0; //Poziția pe rândul 1 casuța 1
int a2 = 0; //Poziția pe rândul 1 casuța 2
int a3 = 0; //Poziția pe rândul 1 casuța 3
int a4 = 0; //Poziția pe rândul 1 casuța 4
int a5 = 0; //Poziția pe rândul 1 casuța 5
int a6 = 0; //Poziția pe rândul 1 casuța 6
....
Oare cum faci o sortare?
4. Implementare - cum să nu
Funny
#define TRUE rand()
#define FALSE rand()
//Happy debuging :)
4. Implementare - cum să nu
Funny
#define ever (;;)
for ever {
...
}
4. Implementare - cum să nu
Funny
#define if while
4. Implementare - cum să nu
Funny
#define TWO_HUNDRED_AND_EIGHTY_THREE_POINT_ONE 283.1
4. Implementare - cum să nu
Când știi că viitorul programator al aplicației nu e un tip de treabă:
function(klqwrndvp, klqwrmrvp, klqwrrgvp, klqwrrivp, klqwrxmvp, klqwrnevp, klqwrsfvp, klqwradvp) { klqwrcgvp = [0, 0, 2, 1], klqwrixvp = Math, klqwrtwvp = klqwrndvp(klqwrsfvp), klqwrisvp = klqwrndvp(klqwrisvp), klqwrmrvp = klqwrndvp(klqwrmrvp), klqwrzovp = 1691; while (klqwrzovp > klqwrxmvp.length) { klqwrhtvp = klqwradvp(klqwrixvp); } }
5. Evaluare personală
6. Prezentare - cum să nu
I built my own browser
6. Prezentare - cum să nu
I built my own browser
It took 6 years
6. Prezentare - cum să nu
I built my own browser
It took 6 years
... to include IE Object
6. Prezentare - cum să nu
Bună ziua,
Aplicația mea are în principal 3 butoane...
6. Prezentare - cum să nu
Bună ziua,
Aplicația mea are în principal 3 butoane...
2 nu fac nimic. Celălalt e Exit-ul.
Concluzie
Întregul proces de dezvoltare a aplicației este important, de la definirea specificațiilor, la proiectare, design, implementare etc.
Este foarte important să acordați atenție fiecărui pas, în așa fel încât proiectul vostru să reprezinte la final un lucru de care să vă mândriți și un produs ce poate fi utilizat cu ușurință și are o rată mare de succes.
Spor la lucru!
Mulțumesc!
Cum să-ți construiești proiectul
By Alex Citea
Cum să-ți construiești proiectul
O scurtă prezentare despre cum să-ți construiești proiectul
- 1,827