Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pytanie o projektowanie programu

Ostatnio zmodyfikowano 2011-01-27 17:12
Autor Wiadomość
dmx81
Temat założony przez niniejszego użytkownika
pytanie o projektowanie programu
» 2011-01-26 23:00:57
witam, zastanawiam sie, jak najlepiej ulozyc projekt :

chce napisac pewien program, ktory bedzie mial rozbudowane menu, kazda z opcji menu przeniesie nas w podmenu z nowymi opcjami.
zachowanie menu i podmenu mniej wiecej sobie juz rozpisalem. chcialem teraz to jakos ladniej poukladac, porozdzielac na mniejsze fragmenty kod i moje pytanie:

1. czy dla zbiorow funkcji tworzyc nowe klasy (np Menu_Wyswietlania, Menu_Edycji itd)
no i wtedy bede musial tworzyc obiekt takiej klasy? ew. tworzyc te funkcje statycznymi i przez operator zasiegu sie do nich dostane?

2. porozpisywac na pliki te funkcje - dla kazdej grupy inny plik (para naglowek + .cpp), pozniej naglowki dolaczac (a pozniej jak ich uzywac, przez extern przed main? czy poprostu dolaczyc naglowek i nazwe wpisac)

3. jak wyzej, ale zamykac w przestrzeniach nazw

4. inaczej?

jak radzicie, jak najlepiej, zeby mialo rece i nogi i bylo poprawnie?(inaczej niz mam teraz, czyli do klasy podstawowej mam teraz wrzucone wszytskie funkcje i dziala poprawnie, ale wg mnie moznaby to jakos rozbic)



nr 3 juz dziala, przy definicji w pliku .cpp nie dalem operatora zasiegu dla przestrzeni nazw, w mainie mam przez extern (ale czy potrzebnie? z reszta zaraz sprawdze) tym czasem prosze o porady :)

czy poprawnym bedzie uzycie using namespace nazwa w pliku zrodlowym z definicjami funckji?
P-27194
malan
» 2011-01-26 23:34:45
Jeżeli Ci to pomoże, to też jestem w trakcie tworzenia aplikacji okienkowej. Mam mniej więcej takie menu z "opcjami":
== Adresy ==
*Wyświetl szczegóły
*Dodaj nowy adres
*Edytuj adres
*Usuń adres
...
Do każdej "opcji" powyższego menu mam osobną klasę. Czyli odpowiednio:
C/C++
class ShowAddressDetailsDialog { };
class AddNewAddressDialog { };
class EditAddressDialog { };
//Ewentualnie jeszcze:
class DeleteAddressDialog { };

W każdej klasie tworzę okno dialogowe, deklaruję eventy itp.
Obiekty tych klas/dialogów mam zadeklarowane jako pola prywatne głównej klasy okna, a powołanie ich do życia wygląda mniej więcej tak:
C/C++
if( showAddressDetailsDlg == 0 )
{
    showAddressDetailsDlg = new ShowAddressDetailsDialog(...);
    showAddressDetailsDlg->init();
}

showAddressDetailsDlg->update();
showAddressDetailsDlg->showDialog() //Metoda dziedziczona...
showAddressDetailsDlg->clear();
Aha, no i każdą klasę trzymam w osobnym plikach (*.cpp, *.hpp).
P-27199
dmx81
Temat założony przez niniejszego użytkownika
» 2011-01-26 23:51:28
ale oczywiscie kazda z tych klas wspolpracuje z obiektami innych klas - tzn z danymi przechowywanymi, jak np adres. Powiedzmy bedziesz edytowal zapisany adres w obiekcie jednej klasy funckja innej klasy - robisz to przez zaprzyjaznione funkcje?
P-27203
malan
» 2011-01-26 23:55:14
Żadnej przyjaźni. W konstruktorze przesyłam obiekt klasy
Database
, który zarządza bazą danych.
C/C++
class Address { };

//...

class Database
{
private:
    std::vector < Address > addresses;
}

C/C++
//...

Database * database = new Database; //! Ten obiekt NIE JEST GLOBALNY.
//! Zadeklarowałem go tylko po to, aby pokazać Ci jakiego jest typu.

//...

if( showAddressDetailsDlg == 0 )
{
    showAddressDetailsDlg = new ShowAddressDetailsDialog( database );
    showAddressDetailsDlg->init();
}
//...
P-27205
dmx81
Temat założony przez niniejszego użytkownika
» 2011-01-27 17:12:03
nieco rozwine pytanie, mam juz mniej wiecej ulozona architekture programu, zastanawiam sie nad czym i prosze o w miare jasne wyjasnienie:

czego lepiej uzyc -
wskaznika na obiekt (a za pomoca tego obiektu uzyjemy jego metody)

czy lepiej bezposrednio wskaznika funkcji (metody innej klasy) ktora chcemy uzyc

Drugie rozwiazanie wydaje sie bardziej precyzyjne, ale czy jest duza roznica? tzn jakie sa zalety i wady jednej i drugiej metody

C/C++
class Rzecz // glowny obiekt
{
    //jakies cechy
};

class PudloNaRzeczy // kontener obiektow wyzej z metodami
{
    vector < Rzecz *> wektor;
    void dodaj();
    void usun();
    void sortuj();
    //inne
};

class Cos // opcja w menu-ma swoja nazwe i po jej wskazaniu, wykona czynnosc
{
    string opcja;
    //wskaznik na funkcje tutaj? np bedzie to opcja USUN, po wybraniu ma wykonac usun()
    //z klasy powyzej
};

class Menu // zawiera w sobie obiekty typu Cos i je wyswietla
{
    vector < Cos *> wektor
    void dodaj_opcje() //tworzy opcje np przez new, ew bedzie dodawac juz istniejace
    void wyswietl(); /* w petli for wyswietli wszystko co w wektorze, dla wybranego //obiektu wykonana zostanie funkcja wskazywana przez wskaznik, ktory w sobie zawiera... */
}

mniej wiecej zarysowo o cos takiego mi chodzi - bedzie to poprawnie? czy raczej blednie...

P-27232
« 1 »
  Strona 1 z 1