[Homework] OOP - Defining Classes - Януари 2015
Мисля няма да е лошо да имаме обща тема за първото домашно от курса по ООП от нашия випуск. Не за друго, а доста хора имат въпроси и питат в най-различни теми, което е доста трудно за следене и е доста разхвърляно. Според мен би било добре да правим нови общи теми за различните домашни и нещата да се коментират вътре. На мен поне, а и предполагам на други хора им е по-лесно всичко да е накуп, а не отделни теми за всяка задача.
Ето го моето първо домашно:
На 3-та задача имам 2 класа в 1 файл, знам (вече) че не се прави така, но домашното го писах преди 2 седмици, а сега не ми се занимаваше да преправям.
4-та задача я написах днес, след като изгледах половината курс. Не ми се занимаваше да преправям override ToString на класовете, затова като сортирах само CurrentStudent-ите в нов масив, заедно с това направих и нови анонимни обекти като им взимам които пропертита искам (ред 21-35). C# изкарва анонимните обекти подобно на JavaScript, достатъчно добре ми се стори за целите на задачата :)
Също за 4-та ме мързеше да пиша и пропертита с проверки за различните елементи, затова само съм сложил get-ъри и set-ъри.
"до някъде съм съгласен, че една и съща батерия може да има различен живот в различни машини."
Tight coupling. Не трябва да е така. Обектът Батерия може да съществува, без има обект Компютър (или Машина). Както в реалният живот можеш да си купиш батерия, така и в пограмирането можеш да кажеш колкото си искаш пъти "new Battery()" без да си създал преди това инстанция на обекти от тип Машина/Компютър.
Всеки обект трябва да може да съществува отделно, без да е нужно да е просто зависимост за някой друг. Батерията не трябва да разчита на това, че ще бъде подадена като injection на компютър и покрай този факт да смята някакви работи.
Позволено е само обратното. Да не можеш да създадеш компютър, ако не си му подал компоненти. Но далеч не е правилно да не можеш да правиш компоненти, когато нямаш компютър. Нарушава се така наречения Law of Demeter
Пропуснал съм да уточня за втория вариант - живота на батерията да е пропърти на лаптопа, но не такова, което се въвежда при създаването му.
Да, нещо такова би свършило работа, но пак не е съвсем правилно.
Това по-скоро на абстрактно ниво би представлявало:
- Нещо от тип машина, което задължително приема нещо от тип Зареждащо се устройство, и задължително има свойство до колко е заредено.
Изразено по някакъв подобен начин: http://pastebin.com/u6ce8ZkX
Това, естествено, за целите на задачата е overkill. Иначе ти позволява голяма гъвкавост, така всяка машина я задължаваш да я зарежда нещо - настолния компютър - захранването, колата - акумулатора (май тва беше?), лаптопа - батерията, или зарядното, зависимост дали е включен в тока и т.н. :)