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

Programowanie obiektowe, jak stworzyć "relację" między obiektami?
FA
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:4
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).

Kopiuj
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.

Kopiuj
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());

    }
}


edytowany 1x, ostatnio: fc_archi
LO
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:18
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ą

DI
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:3miasto
  • Postów:89
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.

Kopiuj
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;
    }

As I have said so many times, God doesn't play dice with the world. - Albert Einstein
edytowany 15x, ostatnio: dilax
FA
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:4
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.

Kopiuj
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ń.

FA
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:4
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.

Kopiuj
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

FA
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 7 lat
  • Postów:4
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ą

Kopiuj
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

edytowany 2x, ostatnio: fc_archi
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:dzień
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
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


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.