Koncepcja klas

2011-08-26 12:17
0

Tak, to znowu ja. Tym razem pisze w sekcji newbie więc może nie znajdzie mnie payl :P

Ale do rzeczy. Do tej pory pisałem głównie w delphi. Były to aplikacje okienkowe i nigdy specjalnie nie przejmowałem się klasami. Formatki tworzyłem kreatorem a on wstawiał niezbędny kod. Zajmowałem się procedurami obsługującymi przyciski.

Potem przyszedł czas na książkę do JAVY i tu w zasadzie poznałem programowanie obiektowe. Nie miałem jednak jeszcze okazji popisać zbyt wiele (jakieś początki na Androidzie).

Obecnie muszę wykazać się sensowną strukturą klas w małym projekcie który mi zlecono. Nie wyrobiłem sobie jeszcze chyba odpowiedniego sposobu myślenia Jeśli chodzi o OOP dlatego chciałem prosić o jakąś podpowiedź.

Stworzyłem szereg funkcji obsługujących pewien format tekstowy oraz formatkę prezentującą ich działanie. Funkcje rozłożyłem w dwóch modułach, formatka jest na kolejnym. Nie sądzę jednak, żeby to było "profesjonalne" rozwiązanie sprawy. Zleceniodawca oczekuje ode mnie większego skupienia się na koncepcji klas.

Oto przykładowy plik, który obsługuje:

-IdentDostawcy----StandardPL-IdentOdbiorcy-DataWystawienia
 FAH/1319/93/95   1          120027        03.01.19

-KSBLOZ-------NazwaTowaru--------------------------------Ilosc---
 116590111000 Vit. A kaps. 12,000 j.m. 50 szt.            10.000
 116590311000 Vit. A plyn 50.000 j.m./1ml 10 ml            5.000
 119530111009 Vit. A+D3 (2000j.m.A+1000j.m kaps. 50 szt.   5.000
 119530311057 Vit. A+D3 solutio aquosa krople 10ml         5.000

Plik może mieć różną zawartość kolumn w części nagłówka jak i części głównej oraz dowolną liczbę rekordów.
Stworzyłem już funkcje odpowiedzialne za:
zliczanie ilości znaków w kolumnach (osobno dla nagłówka i części głównej)
zliczanie ilości kolumn (osobno dla nagłówka i części głównej)
zwracanie nazw kolumn w tablicy lub pojedynczo(osobno dla nagłówka i części głównej)
zwracanie tablicy wielowymiarowej z polami głównej części pliku
*zwracanie wartości dowolnej kolumny przy podanym KSBLOZ

Dopisze jeszcze:
dopisywanie nowego wiersza
usuwanie wybranego wiersza
*modyfikowanie dowolnej wartości

Mój dylemat:
Wiadomo, że muszę mieć jedną formatkę, która jest klasą dziedziczącą po TForm i przyznam bez bicia nie wiem jakie inne klasy mógłbym stworzyć by projekt był bardziej przejrzysty. Wydaje mi się on tak niewielki, że najchętniej wszystko zmieściłbym w jednej :/ Jednak muszę na siłę poupychac to do klas, eby pokazać, że potrafię na nich operować.

Myślałem o następujących klasach:
TMain - formatka do prezentacji
TColumns - zawierająca metody obsługujące parsowanie wierszy z kolumnami
TRecords - zawierająca metody obsługujące parsowanie wierszy z rekordami
TEditData - zawierająca metody obsługujące modyfikowanie pojedynczych wartosci w pliku, dodawanie i usuwanie wierszy

Może ktoś będzie miał dla mnie lepszą propozycje struktury

edytowany 2x, ostatnio: JacekKw, 2011-08-26 12:57
Pokaż pozostałe 3 komentarze
Sam mówisz że chodzi o klasy a przy TPola mówisz METODY obsługujące pola... Albo nie rozumiem, albo chodzi ci o klasę a mówisz metody. Póki co wydaje mi się to na tyle proste że wcisnąłbym to do jednej klasy. I ciężko abyś opisał projekt na tyle dokładnie żebyśmy wiedzieli jak to najlepiej podzielić. To przychodzi z czasem i tego nie przeskoczysz. A co twojego "fck" - podobno powiedziałeś że cb coś nauczyłem więc nie wiem o co ci chodzi, ale liczenie że cb nie znajde jest głupotą X.X . - payl 2011-08-26 12:45
Liczenie, że mnie nie znajdziesz to zwykły żarcik na rozluźnienie atmosfery ;) A teraz klaryfikuje: uzywając słowa pola nie miałem na myśli pól w znaczeniu programistycznym (chodziło mi o rekordy głównej części pliku). Zedytuje żeby się nie mieszało. Zróbmy z niej klase TRekordy w której będą metody obsługujące działania na rekordach. Wracając. Faktycznie jest mały, musze jednak "na siłę" podzielić go na klasy, żeby pokazać, że umiem ich używac w podstawowym stopniu - JacekKw 2011-08-26 12:51
No jeśli ci każą rozdzielać na klasy to rozdzielaj jak leci, przecież nie Twoja wina że nie możesz tak jak się powinno to robić. Pozatym, wydaje mi się że Twoje pytanie znowu jest nie na miejscu - my jesteśmy jakąś Twoją opiekunką? Bo tak się zaczynam czuć. Nie wiem jakiej odpowiedzi oczekujesz. - payl 2011-08-26 12:59
jesteś moim mentorem payl :P w zasadzie nie oczekuje gotowego rozwiązania. Zedytowałem końcówke posta. Tak na prawde wystarczy mi odpowiedz madrzejszego ode mnie typu: "spoko, takie klasy mogą być" :) - JacekKw 2011-08-26 13:00
Osobiście uważam że nie ma sensu tego rozbijać, bo to zrobi tylko problemy. Jedna klasa wystarczy, No ale skoro jedna klasa nie wystarczy, to rób jak chcesz, ale im więcej klas tym fajniejsze problemy... Chociaż odrazu przyznaje że nie jestem jakimś pr0 w klasach, i może ktoś wymyśli coś lepszego w rozbiciu. - payl 2011-08-26 13:05

Pozostało 580 znaków

2011-08-26 13:08

Obecnie muszę wykazać się sensowną strukturą klas w małym projekcie który mi zlecono. Nie wyrobiłem sobie jeszcze chyba odpowiedniego sposobu myślenia Jeśli chodzi o OOP dlatego chciałem prosić o jakąś podpowiedź.

Sensownie to będzie zrobić jedną klasę i w niej wszystko. Zleceniobiorca cię sprytnie testuje :P

A tak serio - samo pogrupowanie funkcji po oddzielnych plikach nie daje ci od razu programowania obiektowego. Zamiast tworzyć klasy dla "pola", "kolumny" stwórz klasę Towar. Czaisz? Po co ci milion obiektów klasy TRecords? Chyba że nie chcesz tworzyć obiektów tej klasy, tylko bedziesz miał wszystkie metody statyczne.

Ciężko to wytłumaczyć. To musi zaskoczyć. Spróbuj zamiast dzielić kod po kodzie, zastanowić się, na czym tak naprawdę będziesz operować? Postaraj się jak najdokładniej odwzorować świat prawdziwy na wirtualny. Czyli - dodajesz do danych Odbiorcę i Towar. No to zrób klasę Towar i klasę Odbiorca a w nich metody do dodawania, usuwania, edycji Odbiorcy i Towaru. A nie wiersza i kolumny....

Pozostało 580 znaków

2011-08-26 13:30
0

Dokładnie takich podpowiedzi potrzebowałem. Rodzajów dokumentów jest kilka (faktura, WZ etc) i to z nich zrobię klasy. Będą obsługiwac poszczególne dokumenty. Z opisanych wyżej funkcji zrobie klase główną po której będa dziedziczyć moje dokumenty.

I teraz pytanie:
Czy aby posłużyć się metodą z klasy nadrzędnej usze wywoływać konstruktor? W javie zdaje sie nie musiałem

Pozostało 580 znaków

2011-08-26 13:31
2

ja jak zaczynam pisać kod to najpierw piszę sobie jakbym chciał, żeby ten końcowy wyglądał - czyli tak jakbym miał już te klasy napisane. np tak:

// nagłówki

int main()
{
  Reader* r = new FileReader("nazwapliku.txt");
  if (r->ErrorOccured())
    {
      cout << r->getError();
      delete r;
      return 0;
    }
  Records recs = r->getRecords(); // pobiera tablicę rekordów, Records to może być np.: vector<Record>
  Columns cols = r->getColumns(); // pobiera nazwy kolumn np.: vecotr<string>
  delete r;
  for (Columns::iterator i = cols.begin(); i!=cols.end(); ++i)
    {
      cout << *i << "\t";
    }
  cout << "\n";
  for (Records::iterator i = recs.begin(); i!=recs.end(); ++i)
    {
      for (Record::iterator j = i->begin(); j!=i->end; ++j)
         cout << *j << "\t";
      cout << "\n";
    }
  return 0;
}

i później piszesz wszystko to co sobie wymyśliłeś - idzie szybko


░█░█░█░█░█░█░█░█░█░█░█░
no tak nie zauważyłem tagu: DELPHI :P - krwq 2011-08-26 15:00
gdybyś jeszcze wcześniej testy pisał to miałbyś TDD :] - msm 2011-08-26 16:02
nie znam tych waszych informatycznych skrótów :P na szczęście jest wikipedia ;p zaczynam żałować że wybrałem automatyke i robotyke - krwq 2011-08-26 23:04

Pozostało 580 znaków

2011-08-26 13:34
0

Znaczy że twoja klasa dziedziczy po jakiejś klasie, do metod której chcesz mieć dostęp?
Raczej powinieneś mieć dostęp z wnętrza klasy. Tyle że ja w delphi nie piszę, ale spróbuj:
Me albo this
i zobaczy do jakich metod masz dostęp dla tego obiektu.

Pozostało 580 znaków

2011-08-26 13:36
0

Ale nie napisałeś (albo przeoczyłem) co ten program tak naprawdę ma robić?

Pełna obsługa pliku?
Ja na dzień dzisiejszy zrobiłbym tylko dwie funkcje - konwersji do/z obiekty(ów) XML/DOM.
A na nich możesz sobie majstrować dowolnie.
Gdyby się okazało że XML to za dużo, to można użyć jakiegoś innego kompozytu:
http://sourcemaking.com/design_patterns/composite/cpp/1

Publiczne implementacje nie-XML jakie znam które by Ci się przydały to:

Ale generalnie to taki plik nie jest dobrym formatem baz danych...


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 3x, ostatnio: vpiotr, 2011-08-26 17:00

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0