[OOP] Defining Classes Part One - Задача 1


13

Така т.к. задачите за домашна всъщност са отделни части на една голяма задача предлагам всички обсъждания на задачите да стават в тази тема. Това ще спести отварянето на 12 различни теми и ще направи форума доста по-чист + ще спестим постването на голямо количество еднакъв код много пъти.

За това тук ви моля, НЕ отваряте тема за всяка отделна задача :)

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

 

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

 

Та имам въпрос по първа задача. Какво ще рече :

class GSM holding instances of the classes Battery and Display

Да разбирам ли че класът GSM трябва да наследява Battery и Display ? Или се има в предвид нещо друго ?

Вероятно утре на лекция ще разбера отговора, ама сега ми стана любопитно :D

На по-напредналите въпросът може да им се струва лесен, ама аз нещо не загрявам :)

 


Благодаря на Nikola Dimitroff за отговора !

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

GitHub

Обяснение:

Тук не мисля че има нещо конкретно, което трябва да се обяснява - правия си 3 нови класа със съответните полета и пропъртита ( сега като се замисля нямаше нужда тук от енкапсулация, но и без това по-нататък се иска :D )

 


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


Отговори



10
Класът GSM трябва да има полета / свойства от тип Battery и Display.
Наследяването дефинира връзка "е" т.е. наследяваш, когато можеш да кажеш, че телефонът Е батерия или телефонът Е дисплей. Последното не е вярно => нелогично е да напишеш такъв код (най-малкото в C# за щастие не можеш да наследиш повече от 1 клас).



0
Аха, а да попитам има ли някакъв по-хитър начин, да пренеса свойствата от Battery и Display, освен чрез повторното им изписване ?

от Teodor92 (13062 точки)

0
http://pastebin.com/nxv7YNhv
Може би най-важното правило, което трябва да знаеш е DRY - Don`t repeat yourself. Никога, при никакви обстоятелства не трябва да имаш повтарящ се код (по-дълъг от един оператор естествено).




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



0
Добро утро! Права си. Търсенето в тема с 200 поста е нечовешко и има вероятност да изгубиш два часа да търсиш нещо, което не съществува :) Диди


0
А за задачите... не само за теб няма да са елементарни. Убедена съм, че има доста курсисти, които се сблъскват за пръв път с материята ;)




0
Имам въпросче. Лошо ли е да сложа класовете Battery и Display в GSMHolding. Както тук http://pastebin.com/V2dTy7L5 Ако не е ок, защо? Сми, на мен ми изглежда логично, обаче материята е нова и имам чувството че не трябва да са точно така...



0
Препоръчвам ти да използваш обекти от класовете Display и Battery и да избягваш вложените класове. Логиката ми е, че обекти от тези класове могат да съществуват и извън контекста на GSM класа, а щом това е възможно => не трябва да се ползват вложени класове. Надявам се да съм го обяснил добре. Ако имаш въпроси, моля заповядай. :)

от vlad_karamfilov (4595 точки)

0
В случая мисля, че може да ги вложиш (но само в конкретната задача), защото всичко е семантично цяло. Иначе в реалният "живот", стига да не ти трябват само както в е в този случай, е както каза колегата vlad_karamfilov.

от cherokee (1277 точки)



1
Ами, и аз забелязах, че всички задачи са към една обща и даже се зачудих дали да не напиша кода направо в едни 3 файла (мобе би са повече след първите 3-4 задачи - не съм ги чел по-подробно нататък все още). Засега не знам какво да правя и ще оставя нещата за въпроси тази вечер.

от vlad_karamfilov (4595 точки)


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

от rstfgh (10 точки)


0
Teodor Kurtev 1 - така няма ли да се увеличи времето за търсене на помощ по дадена задача?
Представям си над 20 страници в една тема, разлистване на всяка една от тях и с ctrl+f търсене на помощ към задача, която ни интересува.



0
Така е, НО си мисля че ще стане същото ако отворим теми за всяка една отделна задача - много страници с линкове :)

от Teodor92 (13062 точки)

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




2
Аз не съм привърженик на идеята всички задачи да са в една тема - така търсенето и споделянето става много неефективно.
Инъче съм с 2 ръце ЗА, да се отделят темите за домашните и да не излизат в началната страница на форума.

от stann1 (1378 точки)


0
Аз споделям мнението на колегата. Ще стане страшна боза ако всико е на едно. Но пък подкрепям идеята на Теодор да се съхраняват в едан тема читавите решения и там да се систематизират всико за да се сглоби проекта накрая.



1

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

@stak441 - де да можеше, мисля че за да стане това някой трябва да напище допълнителна функционалност за форума.

Обмисляше се варинат да се отдели в един отделен раздел всички домашни, но това пак не би помогнало за натоварването на началанта страница....


от Teodor92 (13062 точки)


0
хахаха Тъкмо пуснах предложение по въпроса: http://forums.academy.telerik.com/67247/

от vlad0 (6103 точки)

0
Предполагам, че ако някой от администраторите хареса идеята ще го направи :)

от Teodor92 (13062 точки)


7
Само да кажа, че в момента чета глава 11 "Създаване и използване на обекти" и тя като цяло хвърля доста светлина по темата. Препоръчвам я.



62

Аз да ви дам малък хинт за създаването на пропъртита. Не ги пишете сами, използвайте auto complete-a.

Това може да направите, като напишете prop последвано от 2 табулации.

Това ще изведе:

    public int MyProperty { get; set; }

А ако искате field с property към него напишете propfull последвано от 2 табулации.

Това ще изведе:

 

    private int myVar;
 
    public int MyProperty
    {
        get { return myVar; }
        set { myVar = value; }
    }

 


от kirov (4821 точки)


0
много ценно, един "пльос" от мен

от plamentsokov (105 точки)

0
Благодаря за подсказката, доста по-бързо и удобно стават ;)

от p.tseperski (10 точки)


1
Между другото имам LIst

от radoslavzi (310 точки)


0
Какво е Call? Структура или клас?


0
Call е клас, малко по нататък в домашното го има

от radoslavzi (310 точки)