• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyjaśnienie wątpliwości odnośnie klas i obiektów

VPS Starter Arubacloud
0 głosów
132 wizyt
pytanie zadane 23 kwietnia 2020 w C# przez szafran98 Początkujący (460 p.)
Cześć. Zacząłem pisać aplikację konsolową, żeby zrozumieć oop i mam odnośnie tego kilka pytań. Aplikacja zawiera: klasę abstrakcyjną User, klasę Teacher oraz Student, które dziedziczą z User, oraz klasę GradeBook. GradeBook jest property Studenta, bo jak rozumiem każdy Student musi mieć własny GradeBook i tylko do niego dostęp, czyli przy tworzeniu obiektu Student, tworzy się także obiekt GradeBook. Teacher posiada metody AddGrade i DeleteGrade, więc rozumiem, że do tych metod jako parametr musi dostać obiekt GradeBook od konkretnego Studenta, dla którego chcę te metody wykonać? Czy do tych metod ma być przekazany obiekt Student? Dodatkowo jeżeli są te metody AddGrade i DeleteGrade to rozumiem, że Teacher ma uprawnienia do ich wykonywanie, więc to w klasie Teacher mają się te metody znajdować, a nie w klasie GradeBook?
komentarz 23 kwietnia 2020 przez Adrian1999 Nałogowiec (34,570 p.)
Szczerze, to łatwiej było by to skomentować posiadając kod, bo tak ciężko sobie wyobrazić to wszystko. Zwłaszcza że czasem definicje Twoje mogą być sprzeczne z moimi, nie wiem czy Ty właściwość np nie odbierasz jako zwykłą składową.
komentarz 23 kwietnia 2020 przez szafran98 Początkujący (460 p.)
edycja 23 kwietnia 2020 przez szafran98

@Adrian1999, Proszę kod: https://pastebin.com/Hq2b2YKN

komentarz 23 kwietnia 2020 przez NowyUrzydgownig Mądrala (5,090 p.)

@szafran98, To gdzie jaka metoda jest, do czego należy jest zawsze ciężkie do okręslenia i nie ma prostej odpowiedzi gdzie powinna być ta metoda.

1 odpowiedź

+1 głos
odpowiedź 23 kwietnia 2020 przez Adrian1999 Nałogowiec (34,570 p.)
wybrane 7 sierpnia 2020 przez szafran98
 
Najlepsza

Okej pierwsze co mi się rzuca w oko to tendencja do pisania nadmiarowego kodu w konstruktorze, masz stworzoną klasę użytkownika fajnie jest stworzyć tam bazowy konstruktor do którego będziesz wracać. Pozwoliłem sobie wykonać skrócony przykład by zademonstrować jak to może wyglądać.

using System;

namespace ConsoleApp1
{
    public abstract class Uzytkownik
    {
        public static int NextId { get; set; }
        public int uzytkownikId { get; set; }
        //public uzytkownikTypOpcje uzytkownikTyp { get; set; }
        public string Login { get; set; }
        public string Haslo { get; set; }
        public string Imie { get; set; }
        public string Nazwisko { get; set; }

        public Uzytkownik(int ID, string login, string haslo, string imie, string nazwisko)
        {
            uzytkownikId = ID;
            Login = login;
            Haslo = haslo;
            Imie = imie;
            Nazwisko = nazwisko;
        }
    }

    public class Nauczyciel : Uzytkownik
    {
        public Nauczyciel(int ID = 0, string login = "Nauczyciel", string haslo = "Nauczyciel", string imie = "Bogdan", string Nazwisko = "Bajek") : base (ID,login,haslo,imie,Nazwisko)
        {

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Nauczyciel a = new Nauczyciel();
            Console.WriteLine(a.Haslo);
            Console.ReadLine();
        }
    }
}

Druga strasznie namieszałeś, bo piszesz informacje po angielsku a masz cały kod po Polsku aż nie wiadomo czy szukać w kodzie nazw zmiennych po angielsku czy po Polsku... Uznam że to są te po Polsku.
Co do "Dodaj ocenę", warto pamiętać że klasy są to zmienne referencyjne, a w dodatku możesz dodać w parametrze argumentu takie słowo klucz jak "ref", nie widzę sensu zwracać dziennika, skoro możesz na dzienniku po prostu pracować jako referencji, w ten sposób unikniesz zbędnego zwracania dziennika. Wydaje mi się że właśnie jako że klasa to sama w sobie referencja nawet "ref" nie trzeba dodawać, ale warto wytestować czasem coś mi w głowie nie działa dobrze.

Szczerze to wszystko masz napisane zagmatwanie i ciężko mi się połapać o co Ci chodziło, a myślałeś może żeby do Nauczyciela nie wysyłać dziennika a ucznia? Uczeń niech będzie przypisany do danego dziennika, a dziennik niech ma funkcje "dodaj ocenę". Dziennik sam w sobie jest troche nielogiczny, posiada on ID ucznia? ale przecież tam jest tak na serio "stos" uczniów ponumerowany i usegregowany alfabetycznie.

Kolejna sprawa że przy konstruktorze ucznia, czemu każdy uczeń ma swój własny nowy dziennik, to nie jest logiczne. Dziennik powinien należeć raczej do "klasy (takiej w szkole kilku osobowej minimum)".

W momencie parsowania tak jak w linijce 79, warto dodać operator ??, dla zabezpieczenia przed błędami, w momencie kiedy lewa strona będzie przyjmowała wartość null, to nie wyskoczy Ci błąd.

komentarz 23 kwietnia 2020 przez szafran98 Początkujący (460 p.)
Ok, dzięki postaram się to wszystko przedefiniować.

Podobne pytania

0 głosów
1 odpowiedź 788 wizyt
0 głosów
1 odpowiedź 140 wizyt
pytanie zadane 23 lutego 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 223 wizyt

93,013 zapytań

141,977 odpowiedzi

321,266 komentarzy

62,355 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...