Категория
Loading...
+ Нов въпрос
djc_bg2015 avatar djc_bg2015 922 Точки

[Homework] Static Members and Namespaces (Nov 2015) - Решения

Здравейте колеги, реших да споделя моите решения на задачите.

Както винаги, ако някой намери грешки и бъгове, ще се радвам да сподели.

Поздрави!

https://github.com/vdonchev/StaticMembersAndNamespaces-Homework

11
C# OOP Basics 19/11/2015 19:11:57
krisi1606 avatar krisi1606 33 Точки

Здравей! Много ги благодаря за качването на решениета, сега ще ги прегледам. Не знам аз ли съм единствената, но след Programming Basics тук се чувствам като в небрано лозе, както се казва, имам хиляди въпроси и милион неща не са ми напълно ясни все още, та постоянно гледам да чета чужди решения и примери, просто за да ми идват и идеи на мен.

Не знам нормално ли е да ми е толкова сложно всъщност, но мисля, че нивото драстично се вдигна много.

Конкретно - аз днес мъчих първа и втора. После направо може и аз да споделя моите решения.

18
19/11/2015 22:47:53
Gabbs avatar Gabbs 80 Точки

Здравей Криси,

Мисля, че е нормално да си объркана и да ти е сложно - не се притеснявай и не се предавай. :) С моят випуск преминахме през C# Advanced, което определено много ми помага сега с курса по ООП.

В коя група си записана? Ако чувстваш, че имаш нужда от помощ, можем да се засечем в софтуни и да се опитам да ти обясня каквото те притеснява.

5
20/11/2015 21:21:57
georkom avatar georkom 8 Точки

Не си единствената, Криси, аз се чувствам по-подобен начин, даже още по-зле. Съзнанието за обема от теоретични знания, който е нужно да усвоя и липсата на достатъчно време при мен достига почти до невъзможност да участвам нормално в учебния процес. Определено, схемата, която приложиха за първи път в нашия курс не е удачна за такива като мен.

Благодаря на Габи за окуражителните думи.

6
t.316 avatar t.316 137 Точки

Няма от какво да се притеснявате. Нормално е първия курс след подготвителното ниво да е така. Интензивноста на лекциите е доста по-голяма и материала си е сложен особено ако човек няма предишен опит в пограмирането (като мен). Според мен просто е нужно малко време за адаптация. Аз започнах с AdvancedC# и чак сега в курса по ООП ми се изесняват много неща. В AdvancedC# имаше доста моменти, в който лекторите се чедеха как точно да ни обяснят даден материал без да сме учили ООП. Предметите от Fundamentals нивото няма как да се разделят напълно последователно, защато са доста свързани и се припокриват. 

За да си отговорите на много от въпросите трябва да се навлезе повече в материала. Аз например още от подготвителното ниво се чудя какво е това static (чак сега разбрах laugh).

Ако имате нужда от помощ не се замисляите да питате във форума или да потърсите някой от екипа.

3
vlastanov avatar vlastanov 2 Точки

Здрасти колега, в 1-ва задача полето,в което пазиш началната точка на координатната с-ма е readonly.Ти си го инициализирал.Тогава трябва да е const,a не readonly.Аз съм я решил така:

private static readonly Point3D StartingCoord;

        static Point3D()
        {
            StartingCoord = new Point3D(0, 0, 0);
        }

0
djc_bg2015 avatar djc_bg2015 922 Точки

Мда, прав си, :) Поправям кода.

Поздрави!

0
bacuty avatar bacuty 55 Точки
private static Point3D startPoint = new Point3D(0, 0, 0);

 
        public static Point3D StartPoint
        {
            get
            {
                return startPoint;
            }
        }

а така става ли

0
butanfire avatar butanfire 31 Точки

За тази функция AddContent :

 public void AddContent(string cont)
        {
            this.content = cont;
        }

 

Не трябва ли да е +=? :

 public void AddContent(string content)
        {
           this.content += content;
        }

 

И ако не - защо? :)))

 

Поздрави,

Владо

0
djc_bg2015 avatar djc_bg2015 922 Точки

Ами въпрос на интерпретация :)

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

Поздрави!

0
mtsolov avatar mtsolov 3 Точки

Namespaces задачката не ти е правилна. Погледни отново условието - трябва да създадем класове с namespace Geometry.Geometry2D, Geometry.Geometry3D, Geometry.Storage и т.н. 

 

С две думи: 

1. проектът ти трябва да се казва Geometry,

2. всяка папка в него съответно да се кръсти Geometry2D, Geometry3D, Storage etc...

съответно като съзадеш после отделните класове, ще ти излиза namespace Geometry.Geometry2D, Geometry.Geometry3D и т.н.

3. създаваш класове под всяка папка.

 

Примери: в Circle трябва да изглежда така

namespace Geometry.Geometry2D
{
    class Circle
    {
    }
}

 

разбира се, може и аз да греша. Но вярвам, че това искат от нас. ;) 

 

0
bacuty avatar bacuty 55 Точки

Да, и аз така разбирам условието и доколкото виждам така см го направила :)

0
Gesh4o avatar Gesh4o SoftUni Team Trainer 305 Точки

Здравей,

Ако трябва да следваме условието, то гласи следното: "Write a static class HTMLDispatcher that holds 3 static methods: CreateImage(), CreateURL(), CreateInput(), which take a set of arguments and return the HTML element as string. Use the ElementBuilder class.". Аз съм създал само тези 3 статични метода, в които използвам метода на ElementBuilder класа. Ето код тук.

0
iliyanaydenov avatar iliyanaydenov 25 Точки

Здравейте, някой може ли да ми обясни задача 3, защот не мога да разбера условието? Не разбирам как path-a,който създаваме се намесва в четенето на файла.

2
bacuty avatar bacuty 55 Точки

Това, което аз разбирам е понеже всеки Path e колекция от Point3D, то чрез тези методи да можеш да записваш координатите на всяка точка от даден Path ,а в другия случай да създаваш такъв като координатите на точките са ти записани на файл,четеш ги,създаваш точки, създаваш път от точките:)

Общо взето :) упражение.

2
iliyanaydenov avatar iliyanaydenov 25 Точки

Ааа, значи точките са ниписани във файла и ги четем. Аз си мислех, че точките по някакъв начин ни дават някакви координати за да четем по файла и се чудя какво се случва :D  Благодаря :)

1
bacuty avatar bacuty 55 Точки

Из лекциите от юни месец се споменаваше, че не трябва да връщаме колекция като List<Т>, защото се нарушава принципа за енкапсулация и може да се манипулира, хубаво е колекции да се връщат като IEnumerable<T> :) . Това за Points3D property-то
Споменавано беше по повод на изпит :).

0
23/11/2015 22:38:40
Filkolev avatar Filkolev 4428 Точки

Зависи какво искаме. Ако искаме потребителят да не може да променя нищо, а само да итерира резултатите - да, IEnumerable. Ако искаме да си борави като с обикновен списък с тях, по-добре да върнем резултата като списък. Проблемът с промяната на оригиналните данни се оправя лесно - просто връщаме копие и потребителят си ръчка колкото иска по копирани данни, а оригиналните си стоят непроменени.

1
bacuty avatar bacuty 55 Точки

Благодаря :) много полезно уточнение!

0
djc_bg2015 avatar djc_bg2015 922 Точки

Здрасти Филип, тази част от ООП-то винаги ми е била мъгла, а именно как да енкапсулираме колекции.

Видях че си предложил, ако трябва да върнм лист, да върнем копие, нещо подобно ли имаш в предвид: 

https://gist.github.com/vdonchev/390c2f0c10aa4f14a1c9

Дугото ти предложение е да връщаме колекцията като IEnumerable, нещо такова? 

https://gist.github.com/vdonchev/b1151e3124cdfe671bd8

 

Четох също и за List<T>.AsReadOnly(), това може ли да замести горните два примера?

https://gist.github.com/vdonchev/a99959b0bcafd296e13e

 

Благодаря ти предварително!

0
Alex_29 avatar Alex_29 5 Точки

Понеже имам проблем на първа задача, като създам нова точка, която е равна на Point3D.StartingPoint и след това променя някоя координата се променя и координатата на StartingPoint .Пробвах и с вашия код и получавам същото.

 screenshot - http://puu.sh/lym3v/41b3b7afc9.png

Може би, след като се създаде точка, не трябва да ѝ се променят координатите.

0
25/11/2015 19:07:44
Filkolev avatar Filkolev 4428 Точки

Направи StartingPoint readonly. Предполагам точките са ти struct, т.е. стойностен тип. Ако зададеш на стартовата точка, че е readonly няма да можеш да я променяш.

1
Alex_29 avatar Alex_29 5 Точки

StartPoint e readonly и не мога да кажа Point3D.StartPoint = "нещо", но мога да направя Point3D.StartPoint .XCoordinate = 5;.

http://pastebin.com/VduaC9KL

 

0
Filkolev avatar Filkolev 4428 Точки

А struct ли е? Защото ако точката ти е клас може да я мутираш, но ако е структура - няма да можеш.

Едит: Сега виждам, че е клас. Направи точката структура.

1
25/11/2015 21:51:39
MiBuena avatar MiBuena 7 Точки

Здравейте,

при мен възникна следния въпрос по отношение на именуването на папките:

По време на лекцията Наско каза, че по конвенция папките се именуват като първо се слага името на проекта после точка и после името, което сме избрали. Така обаче, когато започнем да създаваме класове вътре в съответната папка, ако името на проекта е Game, името на папката Game.Engine, неймспейсът на съответния клас вътре се генерира като:

Game.Game.Engine. Това е пример от лекцията. Сега тук в домашната, ако следваме тази конвенция при зад. Namespaces трябва да кръстим проекта Geometry, после папките вътре Geometry.Geometry2D и така неймспейсът става Geometry.Geometry.Geometry2D.

Аз гледах разни стари изпити по ООП и тази конвенция за именуване на папките не се ползва. Примерно при проект "ArmyOfCreatures", папките са си просто Contracts, Extended и Logic, а не ArmyOfCreatures.Contracts, и т.н.

Та въпросът ми е на изпита и в реална работна обстановка ние трябва ли да прилагаме тази конвенция, когато именуваме папките си? Или просто вече е прието, че може да не се спазва?

Благодаря за разяснението.

Поздрави:

0
28/11/2015 20:22:24
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Папките се именуват Game.Engine само ако са на едно ниво с Game. Ако папата е вътре в Game, тогава я кръсти само Engine. Пример - кодът на .NET : https://github.com/dotnet/corefx/tree/master/src

0
MiBuena avatar MiBuena 7 Точки

Ами в случая Game е името на проекта.

Значи когато създаваме папка в него, трябва да е просто Engine, тъй ли?

0
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Да, ето ти пример.

Тук в папката System.Collections ( https://github.com/dotnet/corefx/tree/master/src/System.Collections/src/System/Collections ) може да видиш, че има папка която се казва само Generic. Но неймспейсът на класовете вътре е System.Collections.Generic ( https://github.com/dotnet/corefx/blob/master/src/System.Collections/src/System/Collections/Generic/LinkedList.cs )

1