Loading...

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

martin_n_marinov avatar martin_n_marinov 26 Точки

[Homework] OOP - Static Members and Namespaces - Януари 2015

Не видях да има тема за второто домашно по ООП за Януари, затова реших да направя еднa. Та ето моето домаштно :

01.Point3D

02.DistanceCalculator

03.Paths

04.HtmlDispatcher

05.BitArray

06.Namespaces

 

Някои ако има по-добри решения, особено за 5-та задача, която не ми харесва изобщо как съм я написал, да споделя. 

Тагове:
6
C# OOP Basics 24/01/2015 09:11:43
Filkolev avatar Filkolev 4482 Точки

Първото, което ми направи впечатление е, че във всеки проект пишеш наново класа Point3D, което е излишно. Във всеки проект, в който искаш да ползваш точката, вкарай референция към асемблито от първа задача. След това е лесно, просто слагаш using и името на namespace-a и може да си ползваш класа точка без да го пишеш всеки път наново.

2
martin_n_marinov avatar martin_n_marinov 26 Точки

Това е коректна забележка, но все пак реших, че е по-четливо.

0
a.angelov avatar a.angelov 1316 Точки

Ето моите решения /без 5-та задача, нещо не ми допадна, а и отделих доста време :) /

GITHUB

Мисля, че ми се получиха добре решенията, но препоръките и забележките са добре дошли :)

ПС. И аз съм копирал класовете, добра идея е да ползвам референция към другите проекти за да не се повтарят...

Едит: Коригирах си solution-a с ползване на референции към необходимите assembly-та.

2
24/01/2015 13:24:19
Filkolev avatar Filkolev 4482 Точки

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

0
Filkolev avatar Filkolev 4482 Точки

На 1-ва задача в ToString() е хубаво да достъпваш пропъртитата, а не директно полетата.

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

0
a.angelov avatar a.angelov 1316 Точки

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

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

0
Filkolev avatar Filkolev 4482 Точки

Не съм направил все още 4-та и 5-та задача, но ще ги направя и тях. Ето какво имам до момента: ЛИНК.

На 1-ва задача името на папката се омаза, може да взема да го оправя ако остане време. 

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

1
velio84 avatar velio84 241 Точки

Ето ги и моите решения:

1, 2, 3

4

6

Пета задача няма laughing

@martin_n_marinov - ликовете ти при мен не бачкат - error 404

2
24/01/2015 12:54:21
martin_n_marinov avatar martin_n_marinov 26 Точки

Марси!!! Бях променил линка без да искам.

0
mihayloff14 avatar mihayloff14 824 Точки

Ето и моите задачи от домашното:

GitHub

Сториха ми се доста интересни задачите, особено BitArray, тъй като отдавна си имам симпатии към бинарните операции laughing

Проблемът с повтарящите файлове в различните проекти го разреших като отделих всички такива файлое в отделен Namespace, след което си добавям референция към него. Тъкмо и да поупражня частта за namespaces от лекцията ^^

0
a.angelov avatar a.angelov 1316 Точки

Здравей,

струва ми се, че 3-та задача не си я направил точно по условието... и по-конкретно: 

Create a static class Storage with static methods to save and load paths from a text file.

Отделно си мисля, че е твоя вариант е малко хардкоднат по отношение на файловете и не даваш на юзърите възможност да четат/записват в посочен от тях файл, което силно ограничава функционалността.

1
24/01/2015 13:46:32
mihayloff14 avatar mihayloff14 824 Точки

Да, прав си. Явно не съм обърнал внимание на тази особеност.

Благодаря за забележката, вече преработих конкретните класове и би трябвало да отговарят на условията. ^^

1
velio84 avatar velio84 241 Точки

Някой може ли да ми обясни какво точно прави using? В условието на 3-та задача е дадено:

"Ensure you close correctly all files with the "using" statement."

аз не съм ползвал using, а затварям StreamReader-a във finally секцията със sr.Close(); - това правилно ли е, върши ли работа или е по-добре да се ползва using?

 

0
a.angelov avatar a.angelov 1316 Точки

Автоматично затваря ресурса след като приключи работата с него без ти да се грижиш за това. Погледни презентацията за Exception Handling, слайд 31.

1
24/01/2015 13:28:47
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Using сам се грижи да затвори всеки файл, който използва. Така дори и да гръмне програмата с exception, файла ще бъде автоматично затворен.

1
24/01/2015 13:39:58
Filkolev avatar Filkolev 4482 Точки

Аз пък ползвах статичен метод от класа  File - ReadAllText ако не се лъжа. Той затваря автоматично файла.

Хардкоднал съм променлива с пътя към файла, но не е сложно да се вземе от входа.

0
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Ето ги и моите решения.

Към автора - BitInteger е изключително бавен с обикновените математически операции. Затуй аз ползвах AsParallel метода, който ми позволява да извършвам паралелно тези операции, което се възползва от многоядрените ни машини. Пробвах и със създаване на Task, но става грозно решението. С LINQ и AsParallel много бързо стават нещата.

2
martin_n_marinov avatar martin_n_marinov 26 Точки

Мерси точно това търсех. Добро решение.

1
nedjo avatar nedjo 53 Точки

От два часа се мъча да използвам класа от първа задача Point3D във втора, добавям референция, изплозвам namespace-а на класа using _1_Point3D, но пак не мога да го достъпя от втория проект в солюшъна. Има ли някакви други стъпки или някъде нещо бъркам?

0
mihayloff14 avatar mihayloff14 824 Точки

Сложил ли си самия клас в namespace?

0
nedjo avatar nedjo 53 Точки

Да, namespace-а се казва _1_Point3D и е на класа Point3D. Namespace-a на втория проект е _2.DistanceCalculator. С десен бутон върху References на вторият проект давам Add Reference и избирам _1_Point3D. След това добавям с using _1_Point3D в класа DistanceCalculator като тук вече вижда _1_Point3D namespace-а и ми го дописва. Но решавам да направя обект от Point3D ама не. Не вижда класа Point3D директно, а със самата референция:

_2.DistanceCalculator.Point3D point = new _2.DistanceCalculator.Point3D(2.0, 3.0, 0);

но и тогава ми открива, че нямам конструктор с 3 параметъра и гърми.

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

0
mihayloff14 avatar mihayloff14 824 Точки

Доколкото виждам, namespace-а който използваш е _2.DistanceCalculator, а не namespace-а от първия проект. Предполагам че си направил някакъв клас със същото име във втория проект, но може и да се бъркам. Най-добре сподели source code на класовете, които са проблемни, за да видим по-детайлно откъде може да е проблема.

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Колеги, вие на 4-та задача играхте ли си чак да проверявате дали елемента има inner html или има value атрибут? Някак си за целите на този курс и по-точно за това домашно ми се струва малко излишно.

Ето и моите решения:

GitHub

0
28/01/2015 00:04:05
Filkolev avatar Filkolev 4482 Точки

Аз направих няколко валидации - 1) имам масив с валидните тагове и само такива приемам; 2) приемам празно value, но не и празен attribute; 3) имам поле дали тагът се самозатваря, защото самозатварящите се тагове нямат content и се принтират по различен начин. 

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

1
scienide avatar scienide 17 Точки

github

без 5-та, трябва да я помисля.

0
28/01/2015 16:06:50
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.