[OOP] - Defining Classes Part Two - Task 1,2,3,4


21

Ето условията на задачите: Цък

Ето моя прогрес по нея:

GitHub

Обяснение по класове ( и структури ):

1. Point3D - основната цел тук е да се създаде
точка в 3D пространството. Няма нищо особено - има полета за отделните точки и презаписваме ToString за да печата точката.

2. Path - пази лист от точки, като със свойството Paths достъпваме нашия лист, а с метода AddPoint добавяме нова точка в "пътя"

3. Distance3D - статичен клас, който отговаря за пресмятането на разстоянието м/у 2 точки ( зададени чрез Point3D ). Формулата може да намерите тук: Wiki

4. PathStorage -  тук имаме 2 основни метода:

- PathSave - обикаляме по точките в определен Path и ги записваме в файл

- PathLoad - приемаме лист от пътища за обработка от файл, като четем входа ред по ред. Входните данни приемаме в формата X,Y,Z , а '-' разделяме отделните точки.

Въпрос:

Та имам едно въпросче, което не е точно по задачата, а е по-общо - трябва ли структурите да се обособяват в отделни файлове като класовете или не ?


в C# OOP от Teodor92 (13062 точки)


Отговори



0
Ето какво измъдрих аз:

https://github.com/vasilev81/SecondHomeWorkOOPPartOne

Направи ми впечатление, че при структурите в конструктора не може да се минава през пропъртитата за валидация при инициализиране за разлика от класовете или бъркам? Дава ми грешка, че на всички полета трябвало първо да бъдат зададени стойности.

Искам да помоля, ако някой види нещо, което не трябва да е така в кода да споделя, защото съм съвсем начинаещ в ООП.

от topsoft (420 точки)


0
Добави : this() на конструктура си.

от Teodor92 (13062 точки)

0
Супер, стана. А каква е точно идеята, че взима от дефолтния ли?

от topsoft (420 точки)



0
Ето го и мойто, като гледам горе доло почти всички са еднакви, но го пускам за съвети и препоръки :)
https://github.com/Producenta/DefiningClassesPartTwo1-4tasks

от Ilian987 (387 точки)


0
Условието на 3 задача е да създадем статичен клас със статичен метод. Успявам да го направя, но не знам как да накарам програмата да ми отпечата резултата на конзолата.
Т. е. аз си създавам отделен .cs файл с класа и с метода. Но този клас, за да взема стойностите за x, y, z, трябва да ги декларирам като public, а те трябва да са private. Освен това може би трябва да напиша нов метод ToString(), който да ми отпечатва distance. Как да направя така, че полетата да са ми private, класът static и да успявам да ги извикам и да се отпечатат на конзолата?

от LERRY (582 точки)


0
Данните на класове/структури обикновено са private и достъпът до тях отвън става чрез т.нар. propertiy-та. Те са хибрид между променлива и метод и позволяват да контролираш достъпа до данните на класа.
Пропъртитата могат да имат getter и setter, които се наричат accessor-и на полетата. Getter-ът, както подсказва името, взима стойността на полето (променливата) и я връща на който я е поискал. Setter-ът приема стойност и я задава на private променливата в класа.
В тялото и на двата може да има логика, която организира как (и дали въобще) да става достъпът и промяната на съответната променлива. Всяка променлива (може, но не е задължително да) си има собствено пропърти, както и всяко пропърти може да има getter и/или setter, в зависимост каква функционалност искаш да постигнеш.
По този начин (чрез полета и пропъртита към тях), се спазва един от основните принципи на ООП – енкапсулация, който казва, че един клас трябва да показва на външния свят само толкова информация за себе си, колкото е нужна, за да изпълняава функциите си.
Ако имах кода ти можех да ти дам по-конкретни насоки. Иначе сега... предлагам да си направиш пропъртита (гледай лекцията, гугълни как) в стурктурата, която дефинира точката, за всяка от 3-те ѝ координати. Пропъртитата може да имат само getter, може да имат и двата accessor-a, както решиш.
За да решиш 3-та, трябва да имат поне getter. После в статичния метод Distance, вземаш всяка от координатите чрез пропъртито ѝ, смяташ с формулата и това е.

от georgiwe (720 точки)

0
Полетата са си private, ако ти трябват x,y,z ги вземаш с get на properties, които са public, но за distance по-добре направо работи с обектите на точките, и не ти трябва To.String, защото дистанцията е просто някакво число - double, например, което се връща от метода

от iliyanti (15 точки)



0

Нищо специално при мен.
Хубавото на ООП-то е, че елиминира нуждата от обяснения, така че остава, единствено, да разгледате решението, ако имате нужда, иначе няма да видите нещо ново.
Мога да кажа, че като почвах задачите се чувствах като в небрано лозе.
Решението ми можете да намерите на този линк.
Ползвам StyleCop, ако се чудите защо кодът има приличен вид.


от miroslav.tsakov (1476 точки)


0

От PathStorage класа как да добавям 3д точки?
Чрез ново дефиниран метод (както съм го направил)
Path readPath = new Path();
readPath.AddPath (метод)
или
readPath.PathOf3DPoints.Add(new Point3D(x, y, z)) (свойство)

Ако по-добре е с метод, то свойството, setter-a, защо да не е добре да се използва? Само за верификация?

Може би метод, защото отговаря на "поведение"?

Също така ако откриете нещо съмнително по кода или просто искате да ми дадете съвет. Еми коментирайте.
 

Благодаря.

https://github.com/RadvachCvetkov/TelerikAcademy/tree/master/Object-Oriented%20Programming/Defining-Classes-Part-II/ex01


от Radvach (357 точки)