• 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

Object Storage Arubacloud
0 głosów
110 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ź 596 wizyt
0 głosów
1 odpowiedź 121 wizyt
pytanie zadane 23 lutego 2020 w C i C++ przez Nabuchadonozor Gaduła (3,120 p.)
0 głosów
1 odpowiedź 211 wizyt

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...