[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
Някои може ли да ми помогне. Дава ми : inconsistent accessibility parameter type is less accessible than method, а параметъра си е public, някакви идей ззащо така се получава. Ето и кода
https://github.com/Polichronov/StructurePoint3D

от Al.polichronov (1567 точки)


0
Направи си класа public.

от Teodor92 (13062 точки)

0
Направо си златен. Мерси, тръгна си нормално.

от Al.polichronov (1567 точки)


0

Ето го и моето решение на първите 4 задачи: GitHub.

Може ли някой да ми помогне с четенето на информацията от файла, защото не иска да записва точките в pathList.


от werew (576 точки)


0
Ами ти създаваш List

от Teodor92 (13062 точки)

0
Да изпуснал съм го. Мерси :))

от werew (576 точки)


0
Имам един въпрос относно първата част на задача 4.За класа Path нищо не се казва,само,че трябва да съдържа последнователност от точки...Това трябва да го разбирам като създаване на списък от точки,добавяне на конструктор и на пропъртита за set и get на тоя списък,както и методи за добавяне на точка в списъка,метод изчистване на списъка и евентуално метод за принтиране на списъка ,т.е. всичко това трябва да го има в класа Path,за да си изпълня един вид условието ?

от yoshicore (17 точки)


0
Да точно това е, като "пътя" може да го пазиш под формата на List

от Teodor92 (13062 точки)


0
А може ли да използваме създадения от нас клас GenericList

от songoku (85 точки)


0
Можеш, но лично използвах List<> който ни е предоставен т.к. е доста вероятно да е по-оптимизиран от нашите творения :)

от Teodor92 (13062 точки)

0
Мисля, че щом сме стигнали до тук, значи е време да създаваме собствени функциониращи творения и да ги развиваме. И този проект е добро начало според скромното ми мнение :)

от songoku (85 точки)



1

Интересни са задачките, но още са ми труднички и отива доста време за тях, а не съм сигурен до колко са качествени, така че ако някой има критики или съвети ще е добре дошъл :). 

Домашно.


от tankovski (2828 точки)


0
за да разделяш координатите на точките от текстовия файл, който четеш, може да използваш нещо от сорта на: string[] points = line.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); Така няма да имаш в масива нищо излишно освен стойностите ти



0

Ето и моята група от задачи, решенията задача по задача може да видите тук .
В първите 2-3 задачи са стандартните неща, както на колегите. 4 задача според мен условието е да се направят методи за запазване и зареждане на пътечките в/от файл. Което за мен означава List<Path>. Можете да разгледате решението ми. Аз сплитвам редовете първо по точки и след това по координати, като проверявам координатите дали са Double  и дали са 3 броя.
В класа Program съм тествал всяка една от задачите. Имам ТoString() метод както за класа Point3D така и за Path, което ми позволява да разпечатам списъка от пътечки на конзолата в разбираем формат.

И накрая един въпрос, според вас как трябва да се направи следното нещо - когато четем файл може файла да не съществува или данните в него да не са в правилния формат. В класа PathStorage трябва да хвърляме изключения за всеки от тези случай и след това винаги когато викаме методите за запазване и зареждане, те трябва да са в try cath и да ловим изключенията или е по-добре в класа да имплементиране някакъв код какво да се случва при некоректни дани от горепосочените, въпроса е тогава какво ще връщат методите за запазване и зареждане? Изкажете мнение как би трябвало да се направи?


от AsenVal (3487 точки)


0
Аз се чудих за какво не мога да запиша нищо във файла. В метода SavePaths използваш using, защо? Пробвах и при мен така стана.Ква е идеята?

от plamentsokov (105 точки)


0
Using затваря потока за четене/писане. Ако не се затвори, нещата стават малко ... странни :D

от Teodor92 (13062 точки)

0
ммм верно че двата класа така работеха, или се слагаше след StreamReader reader.Close() или се ползваше using()... За няма и месец и вече го забраих (facepalm)

от plamentsokov (105 точки)


0

Това е моето решение:

https://defining-classes-two.googlecode.com/svn/trunk/

Създавам структура Point3D с три полета ,съответно за трите координати на точката. Имаме и  static readonly поле за точката ,представляваща центъра на координатната система.Аз го инициализирам веднага , после за него имам propertie само с get, тъй като то ще бъде само четено.За Point3D имам конструктор,който приена 3 параметъра (за трите координати) като задължително трябва да имаме и празен конструктор с  : this() например ,за да се компилира кода.С ToString() имплементираме някакъв удачен за нас начин точката да се принтира.

Създаваме статичен клас Distance3D и статичен метод в него,който да изчислява разстоянието между две точки в пространството.Формулата за разстоянието видях от тук:http://bg.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5

Path е клас,който съдържа лист от обекти от създадения вече от нас клас Point3D.За конструктура аз реших да имам ,както празен,който създава празен лист към който после да добавяме инстанции на Point3D,така и конструктор ,който приема вече създаден лист от Point3D.Създала съм си методи AddPoint и PrintPath,за да си добавям точки и да си тествам някакви неща:)




0

Ако има желаещи да погледнат, бих бил благодарен :))

https://github.com/ilian-ivanov/Telerik-Academy/tree/master/CSharp%20OOP/02.%20Defining%20Classes%20Part%20II/Point3D


от ScorpS (1542 точки)


0

Ето го и моето домашно за задачите от 1-ва до 4-та.

Space3D

Структура Point3D, която съдължа координатите на точката в триизмерното пространство. Имаме статично property за точката с координати (0,0) и статичен конструктор, който я създава при първото използване класа. Накрая имаме предефиниран метод ToString(), принтиращ точката и координатите.

Статичен клас Point, съдържащ метод Distance, с който намираме разстоянието между две точки.

Клас Path, наследяващ клас List<Point3D>. Имаме метод AddPoint(), за добяване на точка към поредицата.

Клас PathStorage, съдържащ два метода SavePath() - записва поредица от точки във файл и LoadPath() - принтиращ поредиците от точки, които са във файла.


В класа Space3DTest тествам приложението.