Programowanie obiektowe, jak stworzyć "relację" między obiektami?

0

Witam, potrzebuje podpowiedzi odnośnie programowania obiektowego.

Napisałem mały program który zarządza kontem bankowym (wpłaty i wypłaty z konta).

package archi;

public class Konto {

    // Ustawiamy zmienne potrzebne nam do zalożenia konta
    private String imie;
    private String nazwisko;
    private String numerKonta;
    private double saldo;
    private double limitWyplat;

    // Tworzymy konstruktor ktorym bedziemy zakladali konto w klasie Main
    public Konto(String imie, String nazwisko, String numerKonta, double limitWyplat) {
        System.out.println("Konto zastało założone");
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.numerKonta = numerKonta;
        // Saldo konta ustawiamy na 0
        this.saldo = 0;
        this.limitWyplat = limitWyplat;
    }

    // Tworzymy metodę do wpłacania środków na konto
    public void wplata(double wplata) {
        this.saldo += wplata;
        System.out.println("Wpłacono " + wplata + " zł. Stan Twojego konta wynosi " + this.saldo + " zł");
    }

    // Tworzymy metodę do wypłacania środków z konta
    public void wyplata(double wyplata) {
        // warunek który nie pozwoli na wypłatę środkow z konta jesli ta przekracza limit wyplat
        if (wyplata > this.limitWyplat) {
            System.out.println("Przekroczony limit wypłat. Operacja anulowana.");
            // warunek który nie pozwoli na wypłatę środkow z konta jesli ta przekracza saldo
        } else if (wyplata > this.saldo) {
            System.out.println("Za mało środków na koncie. Operacja anulowana.");
        } else {
            this.saldo -= wyplata;
            System.out.println("Wypłacono " + wyplata + " zł. Stan Twojego konta wynosi " + this.saldo + " zł");
        }
    }

    // Tworzymy gety do pobierania poszegolnych danych z konta
    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public String getNumerKonta() {
        return numerKonta;
    }

    public double getSaldo() {
        return this.saldo;
    }

    public double getLimitWyplat() {
        return limitWyplat;
    }
}


Chciałbym dodać możliwość robienia przelewów między kontami, lecz nie za bardzo wiem jak to zrobić.
Będę wdzięczny za podpowiedzi jak zrobić taką "relację" między kontami, jak to się zwykle ma przy robieniu przelewów.
Poniżej kod w którym sprawdzam czy klasa Konto jest odpowiednio napisana.
Na pierwszy rzut oka wszystko działa jak powinno, ale może dostrzeżecie jakieś błędy.

package archi;

public class Main {

    public static void main(String[] args) {

        // Tworzymy obiekt konto
        Konto pierwsze = new Konto("Jan", "Kowalski", "1234", 200);
        Konto drugie = new Konto("Adam","Nowak","9999",500);

        // Wyswietlamy poszegolne dane z obiektu, sprawdzamy czy gety dzialaja poprawnie
        System.out.println(pierwsze.getImie());
        System.out.println(pierwsze.getNazwisko());
        System.out.println(pierwsze.getNumerKonta());
        System.out.println(pierwsze.getSaldo());
        System.out.println(pierwsze.getLimitWyplat());

        // Próby dokonania wypłaty z konta przy saldzie równym 0, sprawdzamy poprawnośc warunków
        pierwsze.wyplata(100.00);

        // Dokonujemy wpłaty na konto i sprawdzamy saldo
        pierwsze.wplata(500.00);
        System.out.println(pierwsze.getSaldo());

        // Próba wypłacenia z konta
        pierwsze.wyplata(150.00);
        System.out.println(pierwsze.getSaldo());

        // Sprawdzenie poprawnego zakodowania waruku limitu wypłat
        pierwsze.wyplata(300.00);
        System.out.println(pierwsze.getSaldo());

    }
}


0

Najprościej to chyba dodać w klasie Konto metody przelewPrzychodzacy() i przelewWychodzacy() gdzie ta druga po pomniejszeniu salda przyjmie inny obiekt Konto i wywoła na nim tę pierwszą

0

Hej, moim zdaniem możesz skorzystać z drogi przekazywania pożądanego obiektu do argumentów powoływanej metody. Analogicznie możesz tworzyć metody porównujące np. salda kont, typy kont itd. co daje naprawdę spore możliwości do rozbudowy programu o nowe funkcje.

public void przelewA2B(double wysokoscPrzelewu, Konto a, Konto b){
        a.saldo -= wysokoscPrzelewu;
        b.saldo += wysokoscPrzelewu;
    }

public void przelewB2A(double wysokoscPrzelewu, Konto b, Konto a){
        b.saldo -= wysokoscPrzelewu;
        a.saldo += wysokoscPrzelewu;
    }
0
lackOfMotivationException napisał(a):

Najprościej to chyba dodać w klasie Konto metody przelewPrzychodzacy() i przelewWychodzacy() gdzie ta druga po pomniejszeniu salda przyjmie inny obiekt Konto i wywoła na nim tę pierwszą

dilax napisał(a):

Hej, moim zdaniem możesz skorzystać z drogi przekazywania pożądanego obiektu do argumentów powoływanej metody. Analogicznie możesz tworzyć metody porównujące np. salda kont, typy kont itd. co daje naprawdę spore możliwości do rozbudowy programu o nowe funkcje.

public void przelewA2B(double wysokoscPrzelewu, Konto a, Konto b){
        a.saldo -= wysokoscPrzelewu;
        b.saldo += wysokoscPrzelewu;
    }

public void przelewB2A(double wysokoscPrzelewu, Konto b, Konto a){
        b.saldo -= wysokoscPrzelewu;
        a.saldo += wysokoscPrzelewu;
    }

Wielkie dzięki za podpowiedzi rozwiązania problemu. Skorzystam z obu rozwiązań.

0
dilax napisał(a):

Hej, moim zdaniem możesz skorzystać z drogi przekazywania pożądanego obiektu do argumentów powoływanej metody. Analogicznie możesz tworzyć metody porównujące np. salda kont, typy kont itd. co daje naprawdę spore możliwości do rozbudowy programu o nowe funkcje.

public void przelewA2B(double wysokoscPrzelewu, Konto a, Konto b){
        a.saldo -= wysokoscPrzelewu;
        b.saldo += wysokoscPrzelewu;
    }

public void przelewB2A(double wysokoscPrzelewu, Konto b, Konto a){
        b.saldo -= wysokoscPrzelewu;
        a.saldo += wysokoscPrzelewu;
    }

Hej,
Moim założeniem było, że kwota przelewu przelewu będzie pobierana z obiektu który tą metodę wywoła.
Biorąc pod uwagę rozbudowę programu (co z resztą było wspomniane w Twoim poście) tzn. na jednym koncie bankowym możemy mieć kilka rachunków np. Konto oszczędnościowe , Konto walutowe, lokaty itp. Twoje rozwiązanie idealnie się do tego nadaje, krótko mówiąc "Przelew własny".
Dzięki za pomoc
Pozdrawiam

0
lackOfMotivationException napisał(a):

Najprościej to chyba dodać w klasie Konto metody przelewPrzychodzacy() i przelewWychodzacy() gdzie ta druga po pomniejszeniu salda przyjmie inny obiekt Konto i wywoła na nim tę pierwszą

public void przelewWychodzacy(Konto a, double kwotaPrzelewu){
        this.saldo -= kwotaPrzelewu;
        przelewPrzychodzacy(a,kwotaPrzelewu);
    }

    public void przelewPrzychodzacy(Konto a, double kwotaPrzelewu){
        a.saldo += kwotaPrzelewu;
    }

Wszystko działa jak należy, tzn. nie napisałem jeszcze warunków kiedy ma się wykonać.
Dzięki

2

Wszyscy odpisujący w tym wątku, którzy spokojnie przyjęli na twarz, że kwotaPrzelewu jest zapisana na double dostają 10 letni zakaz pracy w sektorze finansowym. Z możliwością ubiegania się o skrócenie kary po latach 5ciu.

double facepalm

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