Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
concepte si design OOP
#19
Posted 14 February 2009 - 22:43
vali38, on Feb 14 2009, 22:21, said: daca acele clase sunt independente si nu genereaza html,noi le folosim doar la prelucrarea codului si ne ajutam de rezultatul returnat pentru a afisa diferite lucuri ? asa am facut in codul meu si app.codul are niste buguri care le pot rezolva dar am stat si m-am gandit mai mult la oop Nici nu te crampona prea mult pe afisare, formatare sau cine stie ce securitate. Acum vorbim strict de design (suntem pe Programming, deci design in sensul conceptual, nu culorile alese ) florindinu, on Feb 14 2009, 20:57, said: Cred ca e cea mai haioasa explicatie a unui shopping cart pe care am vazut-o (e si corecta) florindinu, on Feb 14 2009, 20:57, said: Eu propun urmatoarea chestie: se da tema de mai jos, daca vrei sa inveti si sa rezolvi tema atunci postezi aici ce scrii si noi te ajutam (nu cu cod ci cu sfaturi), poate asa transformam topicul asta in Object Oriented Design 101. Un sistem ecommerce e mult prea complex ca sa il discutam aici, mai ales la nivel de incepator. Tema: Sa se implementeze o aplicatie care tine evidenta masinilor intr-un garaj. Masinile pot fi de diferite culori si marimi, garajul are dimensiuni fixe si in functie de dimensiunea masinilor deja parcate el are un numar limitat de locuri. Implementeaza o pagina care contine o lista cu masini si in care userul poate parca ce masini doreste. - suprafata garajului: 100m^2 - o masina ocupa o suprafata intre 3 si 5 m^2 - clasa garaj si clasa masina NU vor genera HTML - alegi tu tipurile de masini - tii datele in $_SESSION - html-ul nu trebuie stilizat e suficient un select cu tipurile de masini disponibile si un tabel cu masinile deja parcate Rezolva chestia asta cu functii, apoi cu clase. Apoi incearca sa imbunatatesti codul pe masura ce inveti chestii noi. Daca postezi cod, posteaza doar clasele masina si garaj (eventual clasele care le extind), nu ne intereseaza html-ul florindinu, on Feb 14 2009, 20:57, said: O carte mai avansata si mai "matematizata" e aceasta. //LE: trebuie sa invat sa postez mai rapid . @OriginalCopy, am citit-o acum un an jumate cred, mi-a placut destul de mult si o recomand oricarui programator LE @vali38: fara sa ma uit in mod special, mi-a picat privirea direct pe faptul ca folosesti $_SESSION sau $_POST direct din obiecte. Inca o data: aici concepi obiecte capabile sa functioneze independent de mediu ("asfalt, praf, gropi" ), ori array-urile astea superglobale sunt specifice HTTP. Incearca o decuplare totala a obiectelor de orice legat de mediul in care acestea "traiesc". Introdu noi metode (setters, getters) unde e necesar. Nu uita de utilitatea constructorilor unei clase (__construct), carora le poti pasa parametri (nu stiu daca va fi "nevoie" de parametri in clasele tale - dar nici nu conteaza, aici iti poti folosi propria creativitate; defapt chiar esti indemnat sa o faci). |
#20
Posted 15 February 2009 - 07:02
Se poate si mai bine.
Daca vine clientul si zice: Ok, nu-mi plac masinile verzi, le vreau galbene (le bag pe TAXI), vreau sa vopsesti toate masinile verzi din garaj. Hint: 3 clase, Garaj, Masina, Vopsitorie. Gata, am plecat la examen , wish me luck.. |
#21
Posted 15 February 2009 - 11:33
Incearca o decuplare totala a obiectelor de orice legat de mediul in care acestea "traiesc". Introdu noi metode (setters, getters) unde e necesar. Nu uita de utilitatea constructorilor unei clase (__construct), carora le poti pasa parametri (nu stiu daca va fi "nevoie" de parametri in clasele tale - dar nici nu conteaza, aici iti poti folosi propria creativitate; defapt chiar esti indemnat sa o faci).asta e marea problema peste care nu pot sa trec.ca sa faca ceva obiectul trebuie sa primeasca un impuls din exterior.un carut nu se misca pe asfaltul cu gropi daca nu il impingi, nu? asta se intampla si aici.ca sa bag o masina in garaj am nevoie de informatii despre masina.cum le pasez eu functiilor ? m-am uitat la niste functii pentru setter si in toate se foloseste un parametru pentru fiecare input.daca as sti cum sa indes datele trimise in clasa volumul de probleme la implementare ar scadea dramatic <?php class Staff { private $name; public function getName() {return $this->name;} public function setName($name) {$this->name = $name;} } ?> <?php class Employee { public $title; public $lastName; public $firstName; public $price; function __construct( $title, $firstName, $mainName, $price ) { $this->title = $title; $this->firstName = $firstName; $this->lastName = $mainName; $this->price = $price; } function getFullName() { return "{$this->firstName}" . " {$this->lastName}"; } } $product1 = new Employee("B", "B1", "B2", 5.99 ); $product2 = new Employee("A", "A1", "A2", 10.99 ); print "author: ".$product1->getFullName()."\n"; print "artist: ".$product2->getFullName()."\n"; ?> <?php class Staff { var $name; var $city; protected $wage; function __get($propName) { echo "__get called!<br />"; $vars = array("name","city"); if (in_array($propName, $vars)) { return $this->$propName; } else { return "No such variable!"; } } } $employee = new Staff(); $employee->name = "Joe"; echo $employee->name."<br/>"; echo $employee->age; ?> Quote Nu uita de utilitatea constructorilor unei clase (__construct), carora le poti pasa parametri Quote Daca vine clientul si zice: Ok, nu-mi plac masinile verzi, le vreau galbene (le bag pe TAXI), vreau sa vopsesti toate masinile verzi din garaj. Edited by vali38, 15 February 2009 - 11:42. |
#22
Posted 15 February 2009 - 12:10
Asa e, un carut nu se misca daca nu il impingi, dar cum tu implementezi caruciorul telepatic, se misca doar daca te gandesti sa se miste, problema e ca se misca si daca se gandesc altii sa se miste si asa te trezesti ca se misca fara sa vrei. Va trebuii sa implementezi un carut normal pe care trebuie sa il impingi, asa ca ii dai un maner, in cazul nostru o metoda (Carut::push()).
Cat despre constructori.. e destul de simplu, clasa din exemplul tau implementeaza unul (__construct). Constructorii sunt apelati automat cand instantiezi o clasa (creezi obiectul). Hehe.. cat despre clientul taximetrist.. e un client normal, asa sunt toti. Clientii nostri vin mereu cu modificari pe care nu le inteleg si nu vor sa le inteleaga si nu prea poti sa le zici nu, le zici doar cat o sa ii coste. Aici apare problema cu care ne luptam toti, cum sa faci sa ai profit si in cazul asta. Sa zicem ca implementezi o aplicatie pentru un client, la jumatatea proiectului el o sa ceara o functie noua, daca tu trebuie sa rescrii jumatate din aplicatie ca sa implementezi functia.. deja ai pierdut profitul fiindca nu prea poti sa il taxezi prea mult, o sa fie nemultumit, o sa uite de toate functiile pe care deja le-ai implementat si o sa se planga peste tot ca tu nu esti in stare sa implementezi o chestie simpla. Asa ca solutia e sa scrii codul modular si sa nu fii nevoit sa rescrii toata aplicatia pentru o functie noua, doar adaugi un modul si eventual faci cateva modificari mici. PS: ideea era sa modifici aplicatia si sa implementezi si functia asta care se ocupa de vopsire. Vreau sa iti arat greselile, sa le simti pe propria piele nu sa le povestesc . Edited by florindinu, 15 February 2009 - 12:13. |
#23
Posted 15 February 2009 - 12:19
florindinu, on Feb 15 2009, 12:10, said: Asa e, un carut nu se misca daca nu il impingi, dar cum tu implementezi caruciorul telepatic, se misca doar daca te gandesti sa se miste, problema e ca se misca si daca se gandesc altii sa se miste si asa te trezesti ca se misca fara sa vrei. Va trebuii sa implementezi un carut normal pe care trebuie sa il impingi, asa ca ii dai un maner, in cazul nostru o metoda (Carut::push()). Carucior telepatic Quote m-am uitat la niste functii pentru setter si in toate se foloseste un parametru pentru fiecare input.daca as sti cum sa indes datele trimise in clasa volumul de probleme la implementare ar scadea dramatic Gandeste-te asa: dupa ce ai facut cumparaturile, nu te urci si tu in carucior ca sa-l duci unde trebuie sa-l duci, ci stai pe langa el si "il mani" ca pe caruta PS: altfel spus, te folosesti de ce stie obiectul sa faca, fara sa te intereseze cum o face (encapsulation). Tot ce te mai intereseaza (dupa ce ai implementat clasa) este interfata de comunicare (numele metodelor, parametri acestora, proprietatile publice). Edited by OriginalCopy, 15 February 2009 - 12:17. |
#24
Posted 15 February 2009 - 14:56
am intampinat o problema si nu stiu de unde provine
public $masini_parcate=array(); public function getValues($car,$space,$color){ $this->masina=$car; $this->spatiu=$space; $this->culoare=$color; } public function SpatiuDisponibil(){ $s=0; for($i=1;$i<=count($this->masini_parcate);$i++){ if(array_key_exists($i,$this->masini_parcate)){ $s+=$this->masini_parcate[$i]['dimensiune']; } } if(3>$this->suprafata-$s||$this->suprafata<$this->suprafata-$s){ return 0; } else { return 1; } } public function AdaugaMasina(){ $aux=count($this->masini_parcate)+1; $this->masini_parcate[$aux]['masina']=$this->masina; $this->masini_parcate[$aux]['dimensiune']=$this->spatiu; $this->masini_parcate[$aux]['culoare']=$this->culoare; } public function CreazaSesiuni($array){ $aux=count($this->masini_parcate); $array[$aux]['masina']=$this->masini_parcate[$aux]['masina']; $array[$aux]['culoare']=$this->masini_parcate[$aux]['culoare']; $array[$aux]['dimensiune']=$this->masini_parcate[$aux]['dimensiune']; } $ga->getValues($_POST['masina'],$_POST['dimensiune'],$_POST['culoare']); if($ga->SpatiuDisponibil()==1){ $ga->AdaugaMasina(); $ga->CreazaSesiuni($_SESSION); echo 'Masina adaugata'; } else { echo 'Nu mai este spatiu in garaj'; }nu imi adauga sesiunile sub nici o forma intampin destule probleme si asta pentru ca lucrez cu sesiuni.unele sunt de la browser,altele de algoritmica.nu e prea confortabil lucrul cu sesiuni Edited by vali38, 15 February 2009 - 14:58. |
#25
Posted 15 February 2009 - 15:19
Pai nu merge fiindca CreazaSesiuni($array) primeste o copie a array-ului $_SESSION, daca vrei sa trimiti array-ul va trebuii sa trimiti prin referinta, adica sa declari CreazaSesiuni(&$array)
Dar e cam ciudata metoda, de ce nu pui toata clasa in sesiune? E mai simplu $_SESSION['garaj'] = $ga; Edited by florindinu, 15 February 2009 - 15:20. |
#26
Posted 15 February 2009 - 15:48
Quote Dar e cam ciudata metoda, de ce nu pui toata clasa in sesiune? E mai simplu $_SESSION['garaj'] = $ga; |
#27
Posted 15 February 2009 - 16:02
Va fi serializata si salvata in sesiune la sfarsitul scriptului.
Poti face ceva de genul: if(!isset($_SESSION['garaj'])) $_SESSION['garaj'] = new Garaj(); //accesezi $_SESSION['garaj'] ca pe o instanta normala a clasei cat timp vei avea sesiunea activa. Poti sa controlezi procesul cu metodele "magice" __sleep() si __wakeup(): http://www.php.net/m....oop5.magic.php |
#28
Posted 15 February 2009 - 17:15
nu voi putea duce la bun sfarsit modularizarea folosindu-ma de sesiuni pentru stocare.chiar daca folosesc tablouri bidimensionale sau tridimensionale fiecare cu avantajele si dezavantajele lui, dupa serializare nu mai am cum se pun datele in acelasi array (masini_parcate).cred ca o sa innebunesc.de 4 ore ma chinui pe acelasi cod incercand sa gasesc o solutie si nici un rezultat
|
|
#30
Posted 15 February 2009 - 17:58
<?php session_start(); if(!isset($_GET['p']))$_GET['p']='index'; class Garaj { public $suprafata=100; private $masina; private $spatiu; private $culoare; public $masini_parcate=array(); public function getValues($car,$space,$color){ $this->masina=$car; $this->spatiu=$space; $this->culoare=$color; } public function SpatiuDisponibil(){ $s=0; for($i=1;$i<=count($this->masini_parcate);$i++){ if(array_key_exists($i,$this->masini_parcate)){ $s+=$this->masini_parcate[$i]['dimensiune']; } } if(3>$this->suprafata-$s||$this->suprafata<$this->suprafata-$s){ return 0; } else { return 1; } } public function AdaugaMasina(){ $this->getArray(); $aux=count($this->masini_parcate)+1; $this->masini_parcate[$aux]['masina']=$this->masina; $this->masini_parcate[$aux]['dimensiune']=$this->spatiu; $this->masini_parcate[$aux]['culoare']=$this->culoare; echo $aux; } } $ga=new Garaj; switch($_GET['p']){ case 'index': break; case 'adauga_masina': $ga->getValues($_POST['masina'],$_POST['dimensiune'],$_POST['culoare']); if($ga->SpatiuDisponibil()==1){ $ga->AdaugaMasina(); echo 'Masina adaugata'; } else { echo 'Nu mai este spatiu in garaj'; } break; } $_SESSION['ga']=$ga; //session_destroy(); ?> |
#31
Posted 15 February 2009 - 18:31
<?php session_start(); if(!isset($_GET['p']))$_GET['p']='index';Nu scrie in $_GET sau $_POST, ci foloseste variabile intermediare class Garaj { public $suprafata=100;Suprafata trebuie sa fie privata, nu vrei ca cineva rauvoitor sa seteze o suprafata de genul -17 m² sau 'error'. Poti creat metodele setSuprafata($new) { if(is_number($new) && $new > 0) { $this->suprafata = $new; } else { throw new Exception('suprafata imposibila'); } } si getSuprafata() { return $this->suprafata;} private $masina; private $spatiu; private $culoare; public $masini_parcate=array();La fel cu $masini_parcate, imagineaza-ti ceva similar cu $suprafata public function getValues($car,$space,$color){ $this->masina=$car; $this->spatiu=$space; $this->culoare=$color; }Metoda asta lucreaza ca un setter nu ca getter, redenumeste-o setValues() La modul in care functioneaza, ar trebui sa se numeasca insertCar() si sa insereze valori noi in proprietatea masini_parcate. Nu inteleg de ce obiectul $this are proprietati precum "masina", sau "culoare". Un garaj nu are (cel putin nu in tema de mai sus) "o (singura) masina" si o culoare. Are un array de masini, dar pe astea deja le salvezi in $masini_parcate. Deasemenea, ar trebui sa faci o clasa "Vehicul", iar functia insertCar sa aibe semnatura de parametri insertCar(Vehicul $newcar), in care sa $this->masini_parcate[] = $newcar; //pushing the $newcar instance on the stack public function SpatiuDisponibil(){ $s=0; for($i=1;$i<=count($this->masini_parcate);$i++){ if(array_key_exists($i,$this->masini_parcate)){ $s+=$this->masini_parcate[$i]['dimensiune']; } } if(3>$this->suprafata-$s||$this->suprafata<$this->suprafata-$s){ return 0; } else { return 1; } }Din cate vad eu problema, pur practic, sa zicem ca ai un garaj. Si vine un prieten la tine si te intreaba daca-si poate parca masina ($checkVehicle). Sa zicem ca e admisibil sa-i spui ca n-ai loc pentru ca nu mai ai decat 3 m². Dar daca vine un alt prieten si iti cere sa-i parchezi motoscuterul, tot de 3m² ii spui? Sigur nu ai face asa, ci te-ai uita la vehiculul ($checkVehicle) pe care vrei sa-l parchezi inauntru (sa zicem $checkVehicle), si ai compara suprafata pe care o ocupa($checkVehicle->getArea()) cu suprafata libera in garaj, deci metoda ta ar trebui sa fie declarata asa: BOOL spatiuDisponibil(Vehicle $checkVehicle) public function AdaugaMasina(){ $this->getArray(); $aux=count($this->masini_parcate)+1; $this->masini_parcate[$aux]['masina']=$this->masina; $this->masini_parcate[$aux]['dimensiune']=$this->spatiu; $this->masini_parcate[$aux]['culoare']=$this->culoare; echo $aux; } }Deja sunt confuz. metoda se numeste adaugaMasina(), dar nu vad ce masina din exterior adaugi. Acum imi dau seama ce faceai tu mai sus. Nu, nu asa. Nu salva lucruri in Garaj despre care nu esti sigur ca le ai parcate in interiorul garajului sau nu. Nu crea proprietati ale unei clase care defapt nu caracterizeaza instantele acelei clase, ci paseaza "valori temporare" (cum ti-am spus la spatiuDisponibil) prin parametri. $ga=new Garaj; switch($_GET['p']){Aici folosesti variabila temporara decizionala introdusa prin primele linii ale scriptului case 'index': break; case 'adauga_masina': $ga->getValues($_POST['masina'],$_POST['dimensiune'],$_POST['culoare']); if($ga->SpatiuDisponibil()==1){if(TRUE == ...), dupa cum am spus, metoda va returna BOOL. In PHP avem tipul asta de date, nu suntem in C $ga->AdaugaMasina();$newCar = new Vehicle(<lista-de-proprietati-precum-culoarea,latimea,lungimea>); if($ga->spatiuDisponibil($newCar)) { //$ga->adaugaVehicul($newCar);//sau cum se numea metoda ta $mesaj = 'vehicul parcat'; } else { $mesaj = 'spatiu indisponibil'; echo 'Masina adaugata'; } else { echo 'Nu mai este spatiu in garaj'; } break; } $_SESSION['ga']=$ga;Manualul spune: Quote serialize() checks if your class has a function with the magic name __sleep. If so, that function is executed prior to any serialization. It can clean up the object and is supposed to return an array with the names of all variables of that object that should be serialized. If the method doesn't return anything then NULL is serialized and E_NOTICE is issued. The intended use of __sleep is to commit pending data or perform similar cleanup tasks. Also, the function is useful if you have very large objects which do not need to be saved completely. Conversely, unserialize() checks for the presence of a function with the magic name __wakeup. If present, this function can reconstruct any resources that the object may have. The intended use of __wakeup is to reestablish any database connections that may have been lost during serialization and perform other reinitialization tasks. Va trebui sa implementezi functiile magice cum e descris in manual //session_destroy(); ?> Clasa Vehicul va avea un constructor cu parametri precum $culoare, $lungime si $latime, toate cu valorile default NULL public function __construct($color=NULL,$length=NULL,$width=NULL) Astfel vei putea instantia vehicule chiar si in cazuri cand nu stii din start ce culoare, lungime sau latime va avea, caci dupa cum am spus, aici e ceruta si imaginatia ta. IMAGINEAZA-ti ca nu iti poti imagina orice scenariu posibil si imposibil si concepe-ti clasele astfel incat sa fie utile oricui, in orice situatie, fara sa il limitezi pe acel cineva la conceptul tau - asta inseamna "code reusage" Vor mai fi metode ca Vehicle::setColor($color),Vehicle::getColor(), Vehicle::resize($newWidth=NULL,$newHeight), etc. IMAGINEAZA-TI! Think out of the box! Edited by OriginalCopy, 15 February 2009 - 18:34. |
#32
Posted 16 February 2009 - 10:43
postul lui originalcopy mi-a mai deschis mintea...am vazut in mare cum trebuie lucrat...
si o intrebare.cand lucrez cu obiecte, cum imi recomadati sa folosesc exceptiile ? un bloc try la inceputul clasei si il inchid la sfarsit sau doar in metoda sau il las in tot codul.in cazul in care va intampina o problema, ar trebui sa imi opreasca executia scriptului nu numai din blocul try |
#33
Posted 16 February 2009 - 11:56
scuze pentru dublu post dar oarecum am terminat tema
<?php session_start(); if(!isset($_GET['p']))$_GET['p']='index'; if(!isset($_SESSION['masini']))$_SESSION['masini']=''; class Garage { public $area; public $carMinArea; public $carMaxArea; public $masini_parcate=array(); public function __construct($area,$carMinArea,$carMaxArea){ $this->setArea($area); $this->setMinArea($carMinArea); $this->setMaxArea($carMaxArea); } private function setArea($val){ if(is_numeric($val)&&$val>0){ $this->area=$val; } } private function setMinArea($val){ if(is_numeric($val)&&$val>0){ $this->carMinArea=$val; } } private function setMaxArea($val){ if(is_numeric($val)&&$val>0){ $this->carMaxArea=$val; } } public function setMasiniParcate(){ $this->masini_parcate=$_SESSION['masini']; } public function insertCar(Vehicle $newcar){ $this->setMasiniParcate(); $this->masini_parcate[]=$newcar; $_SESSION['masini']=$this->masini_parcate; } public function getVehiclesTotalArea(){ $s=0; foreach($_SESSION['masini'] as $aux){ $s+=$aux->getArea(); } return $s; } public function checkSpace($vehicleArea){ if($vehicleArea=$this->carMinArea&&$vehicleArea<=$this->carMaxArea&&($this->getVehiclesTotalArea()+$vehicleArea)<=$this->area){ return TRUE; } else { return FALSE; } } } class Vehicle { public $name; public $area; public $color; public function __construct($name=null,$area=null,$color=null){ $this->setName($name); $this->setColor($color); $this->setArea($area); } private function setName($nume){ $this->name=$nume; } public function setColor($culoare){ $this->color=$culoare; } private function setArea($arie){ $this->area=$arie; } public function getName(){ return $this->name; } public function getArea(){ return $this->area; } public function getColor(){ return $this->color; } } class Vopsitorie { public function vopsesteMasinileVerzi($arrayCuMasini){ foreach($arrayCuMasini as $aux){ if($aux->getColor()=='verde'){ $aux->setColor('galben'); echo 'Masini vopsite'; } } } } $ga=new Garage(100,3,5); switch($_GET['p']){ case 'index': //codul html break; case 'adauga_masina': $newvehicle=new Vehicle($_POST['masina'],$_POST['dimensiune'],$_POST['culoare']); if(TRUE==$ga->checkSpace($newvehicle->getArea())){ $ga->insertCar($newvehicle); echo 'Masina este in garaj'; } else { echo 'Nu mai este sptaiu in garaj'; } break; case 'vopseste': $vo=new Vopsitorie; $ga->setMasiniParcate(); $vo->vopsesteMasinileVerzi($ga->masini_parcate); break; } //session_destroy(); ?>LE: am folosit prin unele metode sesiuni cu toate ca stiam ca nu am voie si nu le-am mai modificat.trebuia sa le trimit ca parametru originalcopy mi-a dat niste explicatii in post intr-un fel in care nu am mai vazut niciodata.a trebuit sa interpretez in incercarea de a-mi da seama ce sa va intampla daca scriu asa.pana la urma am reusit ce urmeaza acum ? ah ce-mi place ) am plecat la operatie.wish me less pain Edited by vali38, 16 February 2009 - 12:04. |
|
#34
Posted 16 February 2009 - 13:00
vali38, on Feb 16 2009, 11:43, said: postul lui originalcopy mi-a mai deschis mintea...am vazut in mare cum trebuie lucrat... si o intrebare.cand lucrez cu obiecte, cum imi recomadati sa folosesc exceptiile ? un bloc try la inceputul clasei si il inchid la sfarsit sau doar in metoda sau il las in tot codul.in cazul in care va intampina o problema, ar trebui sa imi opreasca executia scriptului nu numai din blocul try class Foo { try { public function one() {} public function two() {} } catch(Exception $e) { //$e->... } }//end of class definition Foo, dar din cate stiu din parser, nu ar trebui sa fie posibil. Oricum, in obiectele tale nu tratezi exceptiile. Tot ce poti face este sa "eviti" erori de exemplu convertind parametrii dintr-un tip de date in altul, cel bun de prelucrat, sau cazuri similare. Uite de exemplu bugul Filtering messages which are not strings in zend framework, ca tot am avut curand de-a face cu el. In clasa ta doar arunci exceptii. De ce? Inca o data: obiectele tale trebuie sa fie independente de mediul in care vor fi instantiate de user (user==programatorul care-ti foloseste clasele, inclusiv vali38 la 40 de ani ), insa pentru ea, instanta unei clase ca "Garaj" care este complet izolata de orice nu are legatura cu propriile proprietati, nu este posibil sa reactioneze in functie de mediu. Arunci exceptia, facandu-ti utilizatorul constient ca a avut loc o eroare, si il lasi sa o trateze el in functie de "mediu". In interiorul clasei nu tratezi decat erorile legate de propriile proprietati. Atat. vali38, on Feb 16 2009, 12:56, said: am folosit prin unele metode sesiuni cu toate ca stiam ca nu am voie si nu le-am mai modificat.trebuia sa le trimit ca parametru OriginalCopy, on Feb 13 2009, 01:36, said: In general, incerci sa imparti problema mare in probleme mai mici. In acest proces (care se intampla doar in imaginatia ta deocamdata [1]), incerci sa cuprinzi cat mai multe subprobleme similare si sa creezi o "subrutina" comuna pentru toate de acelasi fel, ajungand astfel la ... reutilizabilitatea codului! Aici intra in joc cel mai complicat factor: imaginatia ta. Pe langa faptul ca trebuie sa imparti algoritmul in subalgoritmi care se pot "apela" unii pe altii astfel incat sa scrii cat mai putin cod, va trebui si sa-ti imaginezi cum ai putea sa doresti in viitor [!] (peste luni sau ani de zile) sa extinzi un anumit algoritm sau subalgoritm. --- [1] este general cunoscut ca designul (in termeni algoritmici) este cel mai complicat proces. Scrierea codului efectiv este o joaca daca ai deja structura bine definita. Tot general cunoscut este si ca programatorul nu are la inceput nimic in fata lui, decat o problema. El isi construieste singur un "univers" de variabile, functii si obiecte pe care le poate (re)folosi pentru rezolvarea problemei. vali38, on Feb 16 2009, 12:56, said: originalcopy mi-a dat niste explicatii in post intr-un fel in care nu am mai vazut niciodata.a trebuit sa interpretez in incercarea de a-mi da seama ce sa va intampla daca scriu asa.pana la urma am reusit Edited by OriginalCopy, 16 February 2009 - 13:05. |
#36
Posted 16 February 2009 - 13:39
Later edit:
Quote public $area; public $carMinArea; public $carMaxArea; public $masini_parcate=array(); public $name; public $area; public $color; Quote Suprafata trebuie sa fie privata, nu vrei ca cineva rauvoitor sa seteze o suprafata de genul -17 m² sau 'error'. vali38, on Feb 16 2009, 14:11, said: ce ar trebui sa fac in continuare ? Nu stiu, ori acel shopping cart, dar de data asta ca-n viata reala, cu autentificare, modele pentru baza de date, helperi pt html sau json, etc. sau poate are florindinu vr-o idee mai putin complexa care sa te ajute sa exersezi. LE. Idee: un sistem mai dinamic in care sa interactioneze obiectele tale. Vei Suna prea tehnic, stiu. Imagineaza-ti un sistem in care oamenii vin la tine ca GarageLender si tu trebuie sa le parchezi masinile, si sa le returnezi dupa cum iti cere clientul. Trebuie sa inapoiezi masinile mereu detinatorilor si in functie de criterii. Joe poate veni la tine sa-ti ceara "the old green chevy" de exemplu Imagineaza-ti singur si extinde acest scenariu dupa propria placere PS: sa nu uiti de amantul/amanta fiecarei persoane, si de cadourile oferite acestora </insider_joke> |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users