Máme za úkol na Objěktově orientované programování naprogramovat v jakémkoliv jazyce Diář.
Ten má umět:
- Ukládání osobních událostí do diáře
- události jednorázové i opakované
- upozornění na blížící se události
- zobrazení (export/tisk) týdenního/měsíčního kalendáře
Prvky:
- správné a logické použití objektů (ne jako skladiště pro procedury/funkce)
- důsledné oddělení vrstev vícevrstvého návrhu aplikace
- uložení statických dat do souboru (v libovolném formátu)
- zákaz použití databáze
Vůbec nevím, jak začít... Je mi jasný, že mi to tu nikdo asi nevytvoříte, i když bych byl moc vděčný. Ale aspoň nějaký podrovnější návod, kdyby jste někdo měl.. Díky moc
Fórum › C / C++
Diář v OOP...
Tomiard
Jelikož má jít o vícevrstý návrh, předpokládám, že je tím myšleno MVC (Model-View-Controller). Jednoduše řečeno Model jsou data aplikace. V případě diáře by se jednalo např. o události. Takže bys měl třídu Udalost, kde každá její instance by reprezentovala jednu událost. View se stará o zobrazování dat. Předpokládám, že by se jednalo o aplikaci s GUI, tudíž by View zobrazoval tabulky s měsíci, tlačítka atp. A Controller řídí chod. Bere data z Modelu a předává je Viewu.
Potom je už jednoduché popsat, co se po tobě požaduje:
- Ukládání osobních událostí do diáře
Vytvoří novou instanci třídy Udalost a přegeneruje View.
- události jednorázové i opakované
Každá instance Udalosti bude na dotaz, kdy vracet pole hodnot. Když bude instance vytvořena s opakováním, vrátí pole, kde bude jako prvním časem čas zadaný a poté ještě několik dalších časů posunutých o časový určený časový interval.
- upozornění na blížící se události
Např. budeš mít Controller s názvem BliziciSeUdalosti. Ten se zeptá všech instancí třídy Udalost kdy. A když bude ve vráceném poli čas menší, než je uživatelem nastavený interval mezi nynějším časem a vráceným časem, Controller předá Viewu událost k zobrazení.
- zobrazení (export/tisk) týdenního/měsíčního kalendáře
Budeš mít Controller Tyden (resp. Mesic), který bude Viewu předávat události tohoto týdne (resp. měsíce). A když bude mět dojít na export/tisk, tak se použije jiná třída Viewu. Např. budeš mít třídu Gui, která bude zpracovávat data do okýnek a pak třídu Pdf, která navíc dostane soubor, do kterého uloží tabulku s událostmi.
- správné a logické použití objektů (ne jako skladiště pro procedury/funkce)
Dám příklad, jak to může být poskládané. Budeš mít základní objekt Aplikace (někdy také zvaný Front Controller), který bude řídit chod všeho. Přenecháš mu prostor, aby činil svou práci. Poněvadž na začátku nemá žádné podněty, vezme defaultní Controller a předá mu práci. Ten si podle toho, co má dělat vytvoří instanci Viewu (zobrazení uživateli/export/tisk), které předá data Modelu (instance třídy Udalost). Přenechá pole působnosti instanci Viewu, jež zobrazí data. A když se jedná např. o instanci Gui, tak ta zobrazí tlačítka, které po kliku kontaktují instanci Aplikace, že má použít jiný Controller. View skončí svou práci. Controller ukončí svou práci. Aplikace zavolá jiný Controller.
- důsledné oddělení vrstev vícevrstvého návrhu aplikace
To je snad již jasné.
- uložení statických dat do souboru (v libovolném formátu)
Nemusím snad popisovat. Ale jako formát doporučuji XML. Má knihovnu snad pro každý jazyk, proto je práce s ním jednoduchá.
(Obávám se, že jsem to moc dobře nevysvětlil :) takže doporučuji Google. Chápu, že by pro tebe bylo nejlepší, kdybych ti sem dal zdrojový kód, ale od čeho by pak ten úkol byl :) I tak doufám, že ti to alespoň k nečemu bude.)
Díky. Ale zkoušel jsem to udělat a stejně mi to nejde...
Kdyby se tu našel někdo, pro koho by to byla brnkačka a měl chvilku, tak bych byl moc rád. Může to být v jakýmkoliv jazyce - my jsme se učili základy Pascalu, C, PHP a pak Delphi. Tak by bylo nejlepší v něčm z tohodle... Kdyby se někomu chtělo, tak moc díky...:-)
V PHP je to prace minimalne tak na 5-10 hodin, v C++ jeste na vic. To ti nikdo neudala. Tady ti lidi poradi s dilcimi problemy (coz by melo stacit, zas tak slozita uloh to neni). A bukaj uz ti zpracoval strukturu te veci. Co vic chtit...zkousels to vybec?
Tomiard
Ale zkoušel jsem to udělat a stejně mi to nejde...
Ukaž výsledek svého prozatimního snažení. Ani za mák ti nevěřím.
Jinak jseš chlapče líný jako veš. Myslíš, že v životě za tebe kdejaký "kolemjdoucí" udělá tvou práci... a ještě k tomu zadarmo? Myslíš si, že to takhle v reálném životě funguje? Nemyslíš, že lidé na tomto fóru mají i jiné věci na práci než za tebe dělat úkoly do školy? A to naprosto za nic (maximálně za poděkování (ale kdo z toho dneska vyžije, že...))?
A pokud jseš tedy tak líný a nic nedokážeš, jdi do sekce Inzerce (http://programujte.com/index.php?akce=diskuze&kam=diskuze&sekce=103-inzerce) a tam podej seriozní nabídku.
Něco jsem spíchnul, ale fakt tomu vůbec nerozumím... Akorát teď potřebuju ten program odprezntovat (ještě teda není hotový, ani být v době prezentace nemusí). A do prezntace bych potřeboval nějaký obrázek UML nebo nějak prostě zakrerklit strukturu...
Tady jsem se pokusil nějak splnit rozvrstvení:
<?php
class data {
private $radek;
public $udalosti = array();
const ODDELOVAC = "::;::";
const SOUBOR = "data/udalosti.txt";
function __construct(){
$this->radek = file($soubor);
}
public function pridat_udalost($udalost_nazev,$udalost_datum,$udalost_cas,$udalost_opakovani)
public function vymaz_udalost($cislo_radku) {
private function generuj_udalosti($od,$do,$zdroj,$cislo_radku) {
public function ziksat_udalosti($od,$do) {
}
class prezencni {
public function zobraz_formular($dalsi) {
}
public function zobraz_tyden($datum) {
$datum1 = $datum-dayofweek($datum);
$datum2 = $datum + (dayoweek($datum)-7);
data::ziksat_udalosti($datum1,$datum2);
$udalosti = data::ziksat_udalosti($datum1,$datum2);
//pak se vyreslí kalendář...
echo "<table><tr><td>$udalosti</td></tr></table>";
}
}
class aplikacni {
public function pridej_udalost(){
data::p ridat_udalost();
prezencni::zobraz_formular(1);
}
}
?>
Jenže teď nevím, jak to zakreslit. Nemám tam žádnou dědičnost... Prostě vnořuju objekty jeden do druhého... Repstive
volám z aplikace funkci z prezentační řídy a datové...
Kdyby jste mi někdo poradil, jak to zakreslit... Já se v tom fakt nevyznám... Díky
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Úkol v PHP - Diář (objektově orientované programování) — založil Tomiard
OOP — založil Zelenáč
Moderátoři diskuze