Академический Документы
Профессиональный Документы
Культура Документы
Lucrare de curs
la disciplina:
ANALIZA PROIECTAREA I PROGRAMAREA OBIECT
ORIENTAT
Tema: Elaborarea unui system ticket
Chiinu 2015
Cuprins
Introducere -------------------------------------------------------------------------------------------------3
1. Sarcina tehnic ---------------------------------------------------------------------------------------------4
2. Tehnologii --------------------------------------------------------------------------------------------------5
2.1. Mediu de dezvoltare ----------------------------------------------------------------------------------5
2.2. Limbajul de programare PHP------------------------------------------------------------------------6
2.3. Utilizarea =-------- ------------------------------------------------------------------------------------6
3. Proiectarea sistemului informaional --------------------------------------------------------------------7
3.1 Descrierea Enterprise Architect i Rational Rose -------------------------------------------------7
3.2 Descrierea limbajului UML --------------------------------------------------------------------------7
4. Modelarea ---------------------------------------------------------------------------------------------------8
4.1 Diagrame Use case ------------------------------------------------------------------------------------9
4.2 Diagrame de secven -------------------------------------------------------------------------------10
4.3 Diagrama claselor ------------------------------------------------------------------------------------11
4.4 Diagrame de stare ------------------------------------------------------------------------------------12
4.5 Diagrame de activiti -------------------------------------------------------------------------------13
4.6 Diagrama de componente ---------------------------------------------------------------------------14
4.7 Diagrama de distribuie ------------------------------------------------------------------------------15
5. Prezentarea aplicaiei -------------------------------------------------------------------------------------17
Concluzie -------------------------------------------------------------------------------------------------------18
Bibliografie----------------------------------------------------------------------------------------------------- 19
Anexe
Introducere
Programarea orientat pe obiecte (OOP Object Oriented Programming) este tehnica cea mai
utilizat ncepnd cu nceputul anilor 90, cnd paradigmele sale principale au fost adoptate i dezvoltate
i de cele mai utilizate limbaje ale perioadei respective: C++, Pascal, Basic, Ada, Java, etc.
Programarea orientat pe obiect (Programare Orientat Obiectual) este unul din cei mai importani
pai fcui n evoluia limbajelor de programare spre o mai puternic abstractizare n implementarea
programelor. Ea a aprut din necesitatea exprimrii problemei ntr-un mod mai natural fiinei umane.
Astfel unitile care alctuiesc un program se apropie mai mult de modul nostru de a gndi dect modul
de lucru al calculatorului.
Pn la apariia programrii orientate pe obiect programele erau implementate n limbaje de
programare procedurale (C, Pascal) sau n limbaje care nici mcar nu ofereau o modalitate de grupare a
instruciunilor n uniti logice (funcii, proceduri) cum este cazul limbajului de asamblare (assembler).
Altfel spus o problem preluat din natur trebuia fragmentat n repetate rnduri astfel nct s se
identifice elementele distincte, implementabile ntr-un limbaj de programare. O mare problem a
programrii procedurale era separarea datelor de unitile care prelucrau datele (subrutinele), ceea ce
fcea foarte dificil extinderea i ntreinerea unui program. Astfel s-a pus problema ca aceste dou
entiti (date i subrutine) s fie grupate ntr-un anumit mod, astfel nct subrutinele s "tie" n
permanen ce date prelucreaz i, mai mult dect att, ele s formeze un modul, adic o unitate care
separ implementarea de interfa, ceea ce implic posibilitatea refolosirii codului.
- abstractizarea: este posibilitatea ca un program s ignore unele aspecte ale informaiei pe care o
manipuleaz, adic posibilitatea de a se concentra asupra esenialului. Este procesul prin care se identific
i se rein numai caracteristicile eseniale ale realitii modelate. Cel mai des, abstractizarea este ntlnit
atunci cnd obiectele cu aceleai atribute i acelai comportament sunt grupate n tipuri abstracte numite
clase. Clasele sunt reprezentri (modele) abstracte, conceptuale ale unor entiti;
- polimorfismul: este abilitatea de a procesa obiectele n mod diferit, n funcie de tipul sau de clasa
lor. Mai exact, este abilitatea de a redefini metode pentru clasele derivate.
- persistena: descrie durata de via a unui obiect n raport cu aplicaia ce l-a creat.
1 Sarcina tehnic
Mai jos sunt descrise cerinele aplicaiei elaborate. i anume sunt enumerate funcionalitile oferite
de sistem i constrngerile care sunt generate.
Cerinele funcionale ale aplicaiei
Specificaiile interfeei:
Pagina home index.php
Logarea pe platform
Adaugarea ticket
Cerinele business:
Tastarea butonului Send A New Ticket va cere vizualizarea formei de adaugare ticket
Tastarea butonului login va trimite spre server o cerere de a fi logat.
Utilizatorul trebuie sa fie informat de lipsa evenimentelor
Cerinele non-funcionale ale aplicaiei
Performana timpul de rspuns la tastarea butoanelor nu trebuie sa fie mai lung decit 1 sec.
(depinde de setarea serverului)
Obiectivele:
Obiectivul de baz al sistemului este de a elabora un system de ticketare care pune la dispozi ia
utilizatorului o interfa simpl i original.
Obiective tehnice:
4
2. Tehnologii
2.1 Mediu de dezvoltare Dreamweaver
IDE-ul este dreamweacer de la Adobe, aceasta putnd fi gsit pe saitul official adobe.
Descrierea dreamveawer
B. Document toolbar
C. Document window
D. Designer/Coder selector
E. Insert panel
n spaiul de navigare se poate de organizat, tria i gsi usor fisierele de care avem nevoie in timpul
lucrului la o aplicaie. Tot in aceasta parte, putem folosi i butonul de cutare printre fisierele existente
- tine de accesibilitatea proiectelor si a fisierelor si subfisierelor in dezvoltare sau terminate.
n spaiul de editare aici se scriu toate codurile ce duc la dezvoltarea unei aplicatii. Aceasta parte
dispune si de optiunea de a ajusta in modul dorit de tine interfata spatiului de editare. Acest spatiu se
transforma intr-o platforma de editat designul cand suntem in interfata builder view. Sunt multe
scurtaturi prin care poti cauta un anumit cod sau o definitie dupa o clasa anume, ajungand direct la ea
prin triere.
Spaiul de depanare este folosita cel mai des, pentru a gasi problemele aplicatiei si pentru a lucra
la indepartarea lor.
Bara de instrumente acest spatiu ofera posibilitatea de a deschide aplicatia in stimulator, si tot aici
avem si butoanele editorului, unde putem cauta si deschide alte coduri, impreuna cu butonul de
organizare.
2.2 Limbajul de programare PHP
PHP este un limbaj de programare. Numele PHP provine din limba englez i este un acronim
recursiv : Php: Hypertext Preprocessor. Folosit iniial pentru a produce pagini web dinamice, este folosit
pe scar larg n dezvoltarea paginilor i aplicaiilor web. Se folosete n principal nglobat n
codul HTML, dar ncepnd de la versiunea 4.3.0 se poate folosi i n mod linie de comand (CLI),
permind crearea de aplicaii independente. Este unul din cele mai importante limbaje de programare
web[2] open-source i server-side, existnd versiuni disponibile pentru majoritateaweb serverelor i pentru
toate sistemele de operare. Conform statisticilor este instalat pe 20 de milioane de site-uri web i pe 1
milion deservere web[3]. Este disponibil sub Licent a PHP s i Free Software Foundation l consider a fi un
software liber.
Iniial, limbajul a fost dezvoltat de inventatorul su, Rasmus Lerdorf. Odat cu creterea numrului de
utilizatori, dezvoltarea a fost preluat de o nou entitate, numit The PHP Group (Grupul PHP).
6
2.3 Utilizarea
PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca i C-ul, Perl-ul sau
ncepnd de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinaie a celor trei. Datorit
modularitii sale poate fi folosit i pentru a dezvolta aplicaii de sine stttorare, de exemplu n
combinaie cu PHP-GTK sau poate fi folosit ca Perl sau Python n linia de comand. Probabil una din cele
mai importante faciliti ale limbajului este conlucrarea cu majoritatea bazelor de date relaionale, de
la MySQL i pn la Oracle, trecnd prin MS Sql Server, PostgreSQL, sau DB2.
PHP poate rula pe majoritatea sistemelor de operare, de la UNIX, Windows, sau Mac OS X i poate
interaciona cu majoritatea serverelor web. Codul dumneavoastr PHP este interpretat de serverul WEB i
genereaz un cod HTML care va fi vzut de utilizator (clientului -browserului- fiindu-i transmis numai
cod HTML).
Arhitectura tip LAMP a devenit popular n industria web ca modalitate rapid, gratuit i integrat de
dezvoltare a aplicaiilor. Alturi de Linux, Apache i Mysql, PHP reprezint litera P, dei uneori aceasta se
refer la Python sau Perl. Linux ocup rolul de sistem de operare pentru toate celelalte aplicaii, MySQL
gestioneaz bazele de date, Apache are rol de server web, iar PHP are rol de interpretator i comunicator
ntre acestea.
PHP foloseste extensii specifice pentru fiierele sale: .php, .php3, .ph3, .php4, .inc, .phtml. Aceste fiiere
sunt interpretate de catre serverul web iar rezultatul este trimis n form de text sau cod HTML ctre
browser-ul clientului.
Enterprise Architect este un instrument grafic, proiectat pentru a ajuta echipele, construind sisteme
robuste i ntreinute. Utiliznd calitatea nalt, integrarea raportrii i documentrii poate oferi o viziune
mprtit cu uurin i precizie.
Rational Rose este un instrument care ofer suport pentru dou elemente eseniale n abordarea
modern a unui proiect software: dezvoltare bazat pe componente i controlul dezvoltrii iterative. Dei
aceste elemente sunt conceptual independente, folosirea lor mpreun este natural i benefic.
interaciuni
n Figura 1.1 de mai jos, sunt reprezentate cazurile de utilizare pentru vizualizare pagini principale.
10
11
ajutorul diagramelor de activiti pot fi modelate foarte bine use case-urile, dar, n aceeai msur, aceste
diagrame pot fi folosite pentru modelarea proceselor de business (fr legtur cu sistemul informatic). n
privina notaiilor, acestea sunt foarte asemntoare cu cele din diagrama de stari. Elementele utilizate
sunt descrise in continuare. O regul important este faptul ca o astfel de diagram trebuie s aib un
singur punct de nceput i unul de sfirit. Orice aciune este elementar i de obicei ea are o singur
intrare i o singur ieire. n cazul cind e necesar s existe mai multe intrri sau ie iri se utilizeaz
ramificatoarele.
15
Diagrama de componente n UML, termenul de component desemneaz un element software fizic din
componenta unui sistem. Astfel, o componenta poate fi: cod binar, document, fisier continand cod sursa
sau date, tabela a unei baze de date. O componenta binara este o parte fizica si substituibila a unui sistem,
care realizeaza si este in conformitate cu un set de interfete.
Diagramele de componenete sunt importante deoarece:
1. modeleaza sistemul software real in mediul de implementare;
2. evidentiaza probleme de configurare prin relatiile de dependenta;
3. reprezinta o imagine a sistemului existent, inainte de a fi modificat;
4. pot evidentia probleme de implementare fara a fi necesar sa se citeasca tot codul sursa
Componentele care nu exist ca entiti de execuie nu apar n aceste diagrame, ci doar n diagramele de
component[3].
O diagram de exploatare este un graf de noduri conectate prin asocieri de comunicare. Nodurile
pot conine instane ale componentelor (componenta exist sau se execut pe nodul respectiv).
Componentele pot conine obiecte (acestea sunt localizate n componente).
17
5 Prezentarea aplicaiei
Pentru elaborarea aplicaiei avem nevoie de ide dreamweaver sau un simplu txt program. Desigur avem
nevoie de un localhost precum la mine este instalat Denwer care poate fi gsit pe Google.
n figura de mai jos, este reprezentat pagina principal a system-ului ticket.
18
Figura 2 Admincenter
19
Concluzie
n urma elaborrii acestei lucrri de curs, am avut ca scop s proiectez i s dezvolt o aplica ie
interactiv pentru web platforme
nainte de a ncepe dezvoltarea oricrei aplicaii este foarte important de a analiza i a stabili cerintele
funcionale i non-funcionale a aplicaiei. Aceste cerinte, usureaz munca programatorului si permite
elaborarea unui sistem competent i organizat.
De asemenea, n procesul de elaborarea o unui produs program, este esenial proiectarea sistemului
dat. Proiectarea este necesar in toate ramurile dezvoltrii aplicaiilor, deoarece doar n acest mod, putem
vizualiza schita, scopul i cerinele proiectului.
Pentru proiectarea aplicaiei am utilizat UML, deoarece este un limbaj standard pentru descrierea de
modele i specificaii pentru software i este folosit pe larg n domeniul IT. Modelarea UML a aplicaiilor
tinde s fie tot mai larg rspndit, asigurnd compatibilitate, posibiliti de inter-operabilitate, re-utilizare
a software-ului, i multe alte avantaje.
Ca instrument de proiectare am folosit Rational Rose si Enterprise Architect, aceste instrumente imi
sunt foarte apropiate i comode pentru proiectare.
n final pot spune c obiectivel plasate la nceputul proiectului au fost atinse.
20
Bibliografie
youtube & Google
SQL Antipatterns: Avoiding the Pitfalls of Database Programming (Pragmatic Programmers), Bill
Karwin, 2010
21
Anexa A
Codul surs
<?php
include 'admin/userLogin.php';
include 'html_config.php';
if ($isLogin)
{
$_key = $_COOKIE['login'];
$userinfo = $Login->getUserInfo($_key);
$userinfo = json_decode($userinfo);
if($userinfo->role == "user")
{
include ('header.php');
include ('menu.php');
include ('content.php');
include ('footer.php');
}
else
{
echo $head;
echo $startBody;
echo ' <div class="navbar navbar-inverse" style="position: static;">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".subnav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href=".">'.SITE_TITLE.'</a>
<div class="nav-collapse subnav-collapse">
<ul class="nav">
<li class="divider-vertical"></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Send A New Ticket
<b class="caret"></b></a>
<ul class="dropdown-menu paddingLR meDrop">
<li class="myForm pull-left">
<p></p>
<form class="form-inline navbar-search" action="newTicket.php" method="post"
name="newTicket" onsubmit="return IE1();">
<div class="control-group paddingLR">
<label class="control-label" for="">Email</label>
22
<div>
<input class="meIn" placeholder="Email" name="email"
type="email" required="required">
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Name</label>
<div>
<input class="meIn" placeholder="Name" name="name"
type="text" required="required">
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Lastname</label>
<div class="">
<input class="meIn" placeholder="Lastname" name="lname"
type="text" required="required">
</div>
</div>
<div class="meFloat">
<div class="control-group paddingLR">
<label class="control-label" for="">Department</label>
<div class="">
<select name="department" class="meIn meWidth">';
$get_option = file_get_contents("admin/moderatorRoles.txt");
$exp_get_option = explode("\n", $get_option);
foreach ($exp_get_option as $value)
{
echo '<option>'.trim($value).'</option>';
}
echo '
</select>
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="inputPassword">Priority</label>
<div class="">
<select name="priorety" class="meIn meWidth">
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Very high</option>
</select>
23
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="inputPassword">Subject</label>
<div class="">
<input class="meIn" placeholder="Subject" name="subject"
type="text" required="required">
</div>
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Message</label>
<div class="">
<textarea class="myTextarea input-block-level meIn" rows="5"
name="message" placeholder="Message" required="required"></textarea>
</div>
</div>
<div class="control-group">
<div class="paddingLR">
<button type="submit" name="sendNewTicket"
class="btn">Send</button>
</div>
</div>
<div class="meFloat2" style="padding-top: 20px;">
<div class="control-group paddingLR"><!-- CAPTCHA -->
<label class="control-label" for="">CAPTCHA</label>
<div class="">
<img id="captcha" src="securimage/securimage_show.php"
alt="CAPTCHA Image" /><br/><br/>
<input class="inputblock-level meIn" type="text" required="required" name="captcha_code" size="10" maxlength="6" />
<a href="#"
onclick="return new_captcha();" style="padding-left: 0px;">[ Different Image ]</a>
</div>
</div>
<span class="pull-right" id="error" style="color: #F33; paddingtop:10px;"></span>
</div>
</form>
<p></p>
</li>
</ul>
24
</li>
</ul>
<div class="pull-right">
<form class="navbar-search" action="login.php" method="post" name="loginForm"
onsubmit="return IE();">
<input class="span3 input-block-level search-query" placeholder="Email"
name="email" type="email" required="required" onfocus="if(this.value == \'Email\') { this.value = \'\'; }"
onblur="if (this.value == \'\') { this.value=\'Email\'; }">
<input class="span3 input-block-level search-query" placeholder="Password"
name="password" type="password" required="required" onfocus="if(this.value == \'Password\')
{ this.value = \'\'; }" onblur="if (this.value == \'\') { this.value=\'Password\'; }" >
<button class="btn btn-success btn-large" style="margin-top:-1px;" type="submit"
name="login" class="btn">login</button>
</form>
</div>
</div><!-- /.nav-collapse -->
</div>
</div><!-- /navbar-inner -->
</div><!-- /navbar -->
<article class="container" style="margin-top: -18px;">
<section class="well well-small mePadd">
<h2 class="meFont"><span class="icon-check meMarg"></span>
'.DESCRIPTION_TITLE.'</h2>
<p style="padding-left: 10px; padding-right:10px;">'.DESCRIPTION.'</p>
</section><!--Description Ends -->
</article> ';
echo '<hr style="margin-top:0px;">
<footer class="pager" style="bottom:0px;">
<p>'.FOOTER.'</p>
</footer>';
echo $endBody;
}
}
else
{
echo $head;
echo $startBody;
echo ' <div class="navbar navbar-inverse" style="position: static;">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".subnav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
25
</a>
<a class="brand" href=".">'.SITE_TITLE.'</a>
<div class="nav-collapse subnav-collapse">
<ul class="nav">
<li class="divider-vertical"></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Send A New Ticket
<b class="caret"></b></a>
<ul class="dropdown-menu paddingLR meDrop">
<li class="myForm pull-left">
<p></p>
<form class="form-inline navbar-search" action="newTicket.php" method="post"
name="newTicket" onsubmit="return IE1();">
<div class="control-group paddingLR">
<label class="control-label" for="">Email</label>
<div>
<input class="meIn" placeholder="Email" name="email"
type="email" required="required">
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Name</label>
<div>
<input class="meIn" placeholder="Name" name="name"
type="text" required="required">
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Lastname</label>
<div class="">
<input class="meIn" placeholder="Lastname" name="lname"
type="text" required="required">
</div>
</div>
<div class="meFloat">
<div class="control-group paddingLR">
<label class="control-label" for="">Department</label>
<div class="">
<select name="department" class="meIn meWidth">';
$get_option = file_get_contents("admin/moderatorRoles.txt");
$exp_get_option = explode("\n", $get_option);
foreach ($exp_get_option as $value)
{
26
echo '<option>'.trim($value).'</option>';
}
echo '
</select>
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="inputPassword">Priority</label>
<div class="">
<select name="priorety" class="meIn meWidth">
<option>Low</option>
<option>Normal</option>
<option>High</option>
<option>Very high</option>
</select>
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="inputPassword">Subject</label>
<div class="">
<input class="meIn" placeholder="Subject" name="subject"
type="text" required="required">
</div>
</div>
</div>
<div class="control-group paddingLR">
<label class="control-label" for="">Message</label>
<div class="">
<textarea class="myTextarea input-block-level meIn" rows="5"
name="message" placeholder="Message" required="required"></textarea>
</div>
</div>
<div class="control-group">
<div class="paddingLR">
<button type="submit" name="sendNewTicket"
class="btn">Send</button>
</div>
</div>
<div class="meFloat2" style="padding-top: 20px;">
<div class="control-group paddingLR"><!-- CAPTCHA -->
27
</footer>';
echo $endBody;
}
?>
29