[C++]Potrzebuję instrukcji do stworzenia biblioteki


(misza_88) #1

Witam,

znowu mam problem i chciałbym Was prosić o instrukcje co mam robić aby utworzyć bibliotekę:


(Pablo_Wawa) #2

Programowanie to nie tylko pisanie kodu programu, ale też umiejętność analizy problemu, pisania/analizowania specyfikacji, podział zadania go na (funkcjonalne) części, itp.

Podaj przykładowe klasy (co mają robić) i uzasadnij dlaczego tak wybrałeś, a wtedy będziemy mogli podyskutować na ten temat.


(Frankfurterium) #3

Bierzesz kartkę i wypisujesz wszystkie rzeczowniki z opisu problemu. Wstępnie robisz z nich klasy. Nieco modyfikujesz, żeby wszystko miało ręce i nogi -> gotowe.

Poczytaj sobie.


(kostek135) #4

Nie będę miał dla ciebie rad na wysokim poziomie abstrakcji, rzadko zajmuje się obecnie analizą. Ale co do twojego problemu, zadanie jest na poziomie szkolnym, więc możesz zastosować stary wypróbowany przez studenta sposób - piszesz wszystko w jednej klasie, jak zauważasz, że powstają “narośle”, coś można oddzielić, coś logicznie nie pasuje i potrzeba na to nowej klasy, itp. to oddzielasz. Może to nie jest zbyt edukujące, ale działa i przy pierwszych próbach programowania może być. Z czasem po prostu widząc co się oddziela w wyniku powstawania programu, będziesz na zaś wiedział jak podzielić problem.

Trochę konkretniejszych rad na niskim poziomie.

  1. Dużo osób (zakładam, że 99,9%) wczytałoby cały plik w postaci stringa do pamięci operacyjnej. Przypominam tylko, że pliki mogą być dużo większe (z racji rozmiaru przestrzeni dyskowych), niż dostępna pamięć. Stąd sugeruję zaimplementować buforowany odczyt przy przeszukiwaniu pod kątem sygnatury.

  2. Skoro już jesteśmy przy przeszukiwaniu, dużo osób przeszukuje tekst w sposób naiwny. Bierze litrey dotąd, aż pasują do wzorca, jeśli i-ta litera ze wzorca nie pasuje, następuje przesunięcie wyszukiwania o 1 i w koło Macieju. To bardzo nieekonomiczne podejście. Zainteresuj się algorytmami Knutha-Morrisa-Pratta albo Boyera-Moora. Po prawdzie służą one do przeszukiwania tekstu, wirusy przeszukujemy pod kątem pewnego ciągu bajtów - ale czy litery też nie tworzą ciągu bajtów?

  3. Jeśli chodzi o kody kontrolne, znowu. Mam wrażenie, że duża część zapisałby to na zasadzie biorę plik -> liczę sumę kontrolną -> dopasowuje do każdej sumy z pliku po kolei. Lepiej użyć np. mapy, zbioru etc. Oczywiście, jeśli ten plik z sumami będzie zbyt duży to mało można zrobić, bo implementowanie własnej bazy danych to trochę za duże wymagania jak na pracę jednej osoby, choć sam pokusiłbym się może o b-drzewo?


(misza_88) #5

Zrobiłbym trzy klasy:

  1. [*:igqq7bfi]Sygnatura,

W klasie Sygnatura robiłbym przeglądanie pliku pod względem sygnatury wirusa. Potrzebowałbym tutaj pliku z sygnaturami i ich długościami (zakładam, że sygnatura może mieć różną długość), nie wiem czy jest sens zapisywać każdą sygnaturę w oddzielnym pliku czy lepiej stworzyć jeden plik i dopisywać do niego nowe definicje.

Klasa KodKontrolny służyłaby do porównywania kodów kontrolnych.

Klasa Ustawienia tutaj wrzuciłbym rozszerzenie pliku i ścieżkę katalogu do skanowania.