Rzuci ktoś okiem na kod początkującego programisty?

0

Cześć,

od początku października uczę się samodzielnie Javy. Napisałem konsolowy program symulujący konto bankowe. Mógłby ktoś rzucić okiem i dać opinię jak wygląda mój kod?

Poniżej link:

https://github.com/bary182/bankAccount

0

To co na szybko zobaczyłem na telefonie:

  1. Wypchnąłeś niepotrzebne śmieci typu pliki *.class.
  2. Angielskie nazewnictwo.
  3. For-y można zastąpić strumieniami z Javy 8, proponuję poczytać.
  4. Zbędne komentarze zaciemniają kod. Kod powinien być samotłumaczący się.

Ogólnie dużo przed tobą.

1

Parę uwag na szybko.

nazwy zmiennych po polsku.

BankAccount

  1. http://wiki.c2.com/?ArrowAntiPattern
  2. dużo skopiowanego kodu np w case 2: i case 3:
  3. magic numbers
  4. zmienne mutowalne

Historia.java

  1. rodzaj powinien być enumem, lub jakimś innym typem, na pewno nie stringiem
    void zapiszZdarzenieWplaty(double kwota) {
        this.rodzaj = "Wpłata środków   ";
        zmienStan(kwota);
    }
    
    void zapiszZdarzenieWyplaty(double kwota) {
        this.rodzaj = "Wypłata środków   ";
        zmienStan(kwota);
    }
    
    void zapiszZdarzenieOtwarciaLokaty (double kwota) {
        this.rodzaj = "Otwarcie lokaty   ";
        zmienStan(kwota);
    }
    
    void zapiszZdarzenieZamknieciaLokaty(double kwota) {
        this.rodzaj = "Zamknięcie lokaty";
        zmienStan(kwota);
    }

Całą powyższa logika jest słaba, Np. mogę dodać zdarzenie wypłaty z ujemną lub dodatnią kwotą.

Pomieszanie tego co jest statyczne i nie. np.

    private static int licznikZdarzen = 0;
    private double saldoLokat;

licznikZdarzen dotyczy klasy, ale saldoLokat tylko instancji

Lokata.java

Single responsibility principle. U ciebie lokata odpowiada za między innymi wyświetlanie informacji użytkownikowi, Wyobraź sobie jak do tego podłączyć gui. A także za odpis zapis.

I tak dalej.

6
  • Kod w języku polskim - zamień nazwy klas/zmiennych na angielski
  • Historia pole 'rodzaj ' - wprowadź enuma zamiast Stringa i moze nazwa bardziej sugestywna np. operationType.
  • tam gdzie masz kwoty używaj BigDecimal zamiast double
  • BankAccount - podziel to na mniejsze metody - takie piętrowe switche, ify itp to nieczytelnie wygląda.
  • nazywaj sensownie zmienne np. zamiast "czyWykonanoZdarzenie = Saldo.getSaldo()" - to jakoś saldo przed operacją
  • generalnie koncepcja dam zmienną statyczną typu saldo w Saldo jest słaba, bo z góry skazujesz się, że będziesz miał tylko jedno saldo czyli tylko konto jednego użytkownika, generalnie widzę że tutaj nagminnie robisz liczniki jako zmienne statyczne co zadziała ci póki masz program dla jednego klienta.
    ...
0

Bardzo dziękuję za Wasze komentarze. Zabieram się do ich zgłębienia i zastosowania.
Wielkie dzięki!

0

@szarotka, @slayer9, @Crude Monte Carlo

Trochę czasu mi to zajęło, ale posiedziałem "kilka" wieczorów nad moim kodem i teraz wygląda tak:

https://github.com/bary182/BankAccount_2

Jeśli ktoś miałby chwilę by podzielić się komentarzem i wskazać co zmienić / poprawić będę bardzo wdzięczny.

Pamiętajcie, że jestem dopiero na początku mojej przygody z programowaniem ;)

PS. Nie działa jeszcze zapis do pliku historii operacji - sprawia mi to trochę trudność ale pracuję nad tym (przez to pierwsza operacja w historii ma nieco inną wartość niż mieć powinna).

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