Konstruktor - problem z prostym zadaniem.

Konstruktor - problem z prostym zadaniem.
JA
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:5
0

Cześć, mam problem z pewnym zadaniem do szkoły i może komuś uda się mnie nakierować w tym temacie.
Otóż mam zadanie:
Twoja firma opracowuje program kadrowy dla pewnej firmy.
O każdej osobie powinieneś posiadać następujące informacje:
Klasa Osoba
imię
nazwisko
numerEwidencyjny
adresZamieszkania
// Klasa Adres zawiera następujące dane:
nazwaUlicy
miejscowosc
numerDomu
numerMieszkania
Zakładając, że najczęściej spotykanym nazwiskiem jest Kowalski , firma znajduje się w Warszawie i ma mieszkania pracownicze przy ulicy Aleje Jerozolimskie , stwórz odpowiednie konstruktory.

Założyłem, że w takiej sytuacji, mogą się pojawiać takie kombinacje:

Nazwisko---- ----Miasto---- ----Ulica----
- - Aleje Jerozolimskie
- Warszawa -
Kowalski - -
Kowalski Warszawa Aleje Jerozolimskie
Kowalski Warszawa -
- Warszawa -

Chciałbym móc tworzyć obiekty Osoba z danymi imię, nazwisko, numerEwidencyjny, adresZamieszkania( i tutaj nazwaUlicy, miejscowosc, numerDomu, numerMieszkania).
Najpierw zrobiłem wszystko w jednej klasie Osoba i chciałem użyć konstruktorów na wszystkie przypadki. Ale wtedy dowiedziałem się, ze nie mogę konstruktorów, które przyjmują tą samą ilość argumentów o tym samym typie(np. jeden konstruktor nazwisko(string) + ulica(string), a drugi nazwisko(string) + miasto(string).
Zacząłem od nowa, i zaciąłem się na tym, że napisałem dwie osobne klasy Osoba i Adres i nie wiem co powinienem dalej zrobić żeby spełnić swoje założenia.

Kopiuj
using System;
using System.Collections.Generic;
using System.Text;

namespace W3_P3
{
    public class Osoba

    {
        string name;
        string surname;
        string registrationNumber;
        Adres adress;
        public string GetData()
        {
            string enteredData = Console.ReadLine();
            return enteredData;
        }

        
        public Osoba(string name, string surname, string registrationNumber, Adres adress)
        {
            this.name = name;
            this.surname = surname;
            this.registrationNumber = registrationNumber;
            this.adress = adress;
            
        }                    
        
        public void printData()
        {
            Console.WriteLine($"Imie: {name}\nNazwisko: {surname}\nNumer ewidencyjny: {registrationNumber}");            
        }
    }
    public class Adres
    {
        public string town;
        public string streetName;
        public string houseNumber;
        public string flatNumber;        

        public Adres(string town, string streetName, string houseNumber, string flatNumber)
        {
            this.town = town;
            this.streetName = streetName;
            this.houseNumber = houseNumber;
            this.flatNumber = flatNumber;            
        }
        public Adres(string town)
        

        

        public void printData()
        {
            Console.WriteLine($"Nazwa miasta: {town}\nNazwa ulicy: {streetName}\nNumer domu: {houseNumber}\nNumer mieszkania: {flatNumber}");
        }
        public string GetData()

        {
            string enteredData = Console.ReadLine();
            return enteredData;
        }

    }
}


AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
0

na marginesie wątku, nie bierz tego nadmiernie do siebie, NIE WIERZĘ w soft biznesowy w tcyh segmentach zbudowany na języku angielskim.
Twój "registration number" to numer kartoteki w kadrach, PESEL, czy jeszcze coś innego? Albo wyraź po angielsku "urlop ojcowski" i "tacieżyńskie"

Konstruktory wymiękają, jak masz wiele podobnych formalnie pól (już to wiesz). Stąd między innym wzorzec Builder.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 4 godziny
  • Postów:1518
2

Żadna z tych klas nie powinna zajmować się pobieraniem danych z consoli ani wyswietlaniem ich.
Zamiast pól daj właściwości z get; protected set;

Nie bardzo rozumiem o co chodzi z możliwymi kombinacjami.
Osoba może istnieć bez przypisanego adresu. Więc zrobiłbym konstruktor dla osoby z podstawowymi danymi i metoda na przypisanie jej adresu.

JA
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:5
0

@AnyKtokolwiek:
pewnie, rozumiem problem z nazwami zmiennych, ale to akurat może zostać, nie będzie jakiejś kontynuacji tego.
@szydlak:
Chciałbym móc tworzyć obiekty, które wywołując będę mógł od razu przypisać pewne wartości:
czyli np. raz samo Miasto, raz samo Nazwisko, raz Nazwisko i Miasto.

Dzięki za rady, ale niestety nie umiem ich wykorzystać :D

AK
b) po prostu Builder. W Javie się "za darmo" Loombokiem generuje, jaka najszybsza ścieżka w C#, to nie przychodzi mi do głowy. https://www.google.com/search?client=firefox-b-d&q=builder+c%23+pattern Może coś znajdziesz do automatyzacji, pisanie z palca jest niewdzięczne.
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
0
jamuzyk napisał(a):

czyli np. raz samo Miasto, raz samo Nazwisko, raz Nazwisko i Miasto.

Po prostu Builder. To działa dokładnie jak opisujesz.
W Javie się "za darmo" Loombokiem generuje.
Jaka najszybsza ścieżka w C#, to nie przychodzi mi do głowy.
https://www.google.com/search[...]-d&q=builder+c%23+pattern
Może coś znajdziesz do automatyzacji, pisanie z palca jest niewdzięczne.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
kzkzg
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 6 godzin
  • Postów:926
2

Konstruktor z domyślnymi parametrami i uzywanie go z parametrami nazwanymi.
https://docs.microsoft.com/pl-pl/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments


Keep calm and blame frontend.
Tell your cat I said pspsps.
JA
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:5
0

@kzkzg: Dzięki. Rozwiązałem w końcu inaczej, ale to wygląda najprościej.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 15 godzin
  • Lokalizacja:Wrocław
4

Jaki builder, jak mają być konstruktory. Nie mieszajcie. To tak jakby w zadaniu było "zapisać dane do pliku", a Wy byście proponowali S3.

AK
Konstrukcja z inicjowaniem pól po nazwie to skazanie na jeden konstruktor (a nie liczbę mnogą)
AK
a inicjator wątku @jamuzyk coś wynalazł, ale nie wiemy co :(
somekind
Dwie klasy -> dwa konstruktory. Niczego więcej tu nie trzeba.

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.