Профил
Loading...
PavelManahilov avatar PavelManahilov 216 Точки

ООП веднага след C# Basics - трудности

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

    Не знам на какво мнение са другите колеги, но за мен определено, това беше грешка и се надявам за другите курсове нещата да се променят.  А относно сегашната ситуация, ако някой има материали (решени задачи и/или обяснение) който да не е толкова обвъзан със Advans-а ще съм му благодарен да сподели

Тагове:
15
Fundamentals Module
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки

Ако дадеш конкретно пример, кое е свързано с Advance може да се опитаме да го приведем до ниво Basics.

0
PavelManahilov avatar PavelManahilov 216 Точки

Конкретен пример, вчера си блъсках главата със листовете и как точно се "държат" във различните класове, говоря за 3-та задача от първото домашно. Също така в доста решения гледам странно форматиране на стринга, ползването на param , stringbuilder , някъде бях гледал решението на 3-та задача от първото домашно със ползване на object, което така и не сванах как точно става, някакви такива малки неща, но заради които не мога винаги да схвана цялата картина. Може би при мен проблема е, че аз главно черпя знания от форума и от вече решените задачи и така гледам да свана логиката. Естествено и от лекциите (които сващам по принцип), но като се сблъскам с някои задачи от домашната направо се отчайвам колко много неща не знам още

13
dique avatar dique 11 Точки

Подкрепям. Аз също не съм карал Advanced и изпитвам огромни затруднения. Дори да зацепвам за какво иде реч в класове, другите неща, които са от advanced ме спъват. 

3
Lamms avatar Lamms 197 Точки

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

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

1
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки

Списъците са масиви, които е саморазширяват. Можеш да използваш масив и да го разширяваш ръчно, когато се напълни, ако знаеш какво са масиви. Всъщност и масиви и списъци са учени в бейсикс, само че там лекцията май се казваше Advanced. Well, поне масиви и списъци някак си ще трябва да се обяснят - било то и поетапно. Просто не се сещам за толкова бейсик вариант, който да пази поредица от елементи и да не е масив/списък. Тук идеята е, че един обект трябва да може да има поредица от други обекти - например компютърът да има поредица от компоненти и да можеш по всяко време да му добавяш или премахваш компоненти. Т.е. тази поредица, на която не знаем точния брой, трябва да я пазим някъде, и това е списъкът.

API-то на списъкъ докато си начинаещ се изчерпва до Add(), Remove(), достъпване по индекс със [] и обхождане с foreach. Ако тук изпитваш някаква трудност - кажи, за да й намерим решението.

Самият списък едва ли се държи по по-различен начин в клас, от колкото и извън клас. Дали пишейки ООП ще кажеш myComp.components.Add(new Component("HDD", "512GB")); или в процедурно програмиране в списък от стрингове ще кажеш componentsOfMyComp.Add("hdd 512 gb"); би трябвало да е все едно и също от гледна точка на usage

params е синтактична захар за това като аргумент на функция да подаваш безброй много разделени със запетайка елементи от един и същ тип, вместо да ги подаваш като масив/списък. Т.е. вместо да кажеш MyFunc(new Component[] { component1, component2, component3 }); да можеш да кажеш просто MyFunc(component1, component2, component3). Това ако искаш просто не го ползвай :) Подавай ги като вече готов масив или такъв масив, който декларираш направо при извикването на функцията, както току-що показах.

СтрингБилдърът е абстракция над операциите със стрингове. Обикновено се ползва за съединяване на стрингове. Същият визуален ефект можеш да постигнеш и с конкатенация на стрингове с +.

var result = "";

if (hdd != null) {

    result += hdd;

}

return result;

Ползването на object не знам къде са му намерили приложение, но силно се съмнявам това да е правилният вариант.

5
PavelManahilov avatar PavelManahilov 216 Точки

Основния ми проблем може би в случая е че не съм затвърдил наученото от Basic. RoYaL така обяснено има логика и не изглежда много трудно, но ми отнема много време първо да си обясня байсик нещата, че чак след това да мога да сващам другите. Както мисля че ти беше казал на първата лекция за някаква пирамида там с проблеми :)  За мен лично щеше да е по-добре да затвърдя знанията с Advance C#. Но ще видим на изпита какво сабя ще покаже.

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

@PavelManahilov, съвсем нормално, да. Аналогията, която дадох беше с Пирамидата на потребностите на Ейбрахам Маслоу, в която се говори, че не можеш да мислиш за потребности от по-висок ранг, ако не си задоволил тези от по-ниския ранг. В случая това са Basics и ООП. Естествено затвърждаване на знанията със сигурност би било полезно, но истината е, че и Advanced C# не е курсът, който ще ги затвърди, там ще имаш много други въпроси от същото естествено, за материал, който трябва да вземеш в курса по ООП. Мисля, че най-валидното обяснение тук е на @Ivaylo.Goranov, който обясни че затвърждава знанията като отделя по 9 часа на ден. Единственият стопър тук е да уточниш какво не ти е ясно - дали думата class например, или конкретно нещо от бейсикса, за да знаеш към кое да се върнеш и да упражниш. Но виждам, че правилно се ориентираш към празнините, които имаш и само трябва да отделиш време да ги запълниш :) :) А ние сме тук за да помагаме, разбира се.

3
galin.s avatar galin.s 11 Точки

стрингове, листи, методи са материал от адвансд, а са доста добре застъпени в ООП
:? 

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

Кое е свързано? По теми: структури от данни - масиви (двумерни(донякъде), речници), списъци; методи; стрингове и текстообработка (донякъде); функционално програмиране;
Аз на първия си изпит по ООП имах по-големи трудности със LINQ, oтколкото да си направя класовете. Това доведе до грешни резултати в judge (25 т.) и при 200 от ръчна проверка имам 4.88. smiley Може и без LINQ, но би било доста по-дървено.
Мисля, че така ще е доста трудно на повечето студенти да схванат темите за делегати, събития и да си направят extension методи. Въпреки че няма да го има на изпита, това са си много интересни теми и на мен би ми било кофти да ги пропусна.
В предишни випуски не е съществувал Advance C#  курсът, но май материалът са си го насъбрали на парчета от други курсове, поне до някъде - не знам как е било, но им е било по-кофти от на нас, които имахме Аdvanced C# - в това съм убеден. На мен ми беше страшно интересен курс и писах домашните с кеф.
Да се приведе до ниво Basics - може и да стане, но друг е въпросът дали би бил пълноценен ОOP курс така. 

1
27/11/2015 10:34:54
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки

При първия випуск ООПто също беше след бейсика. Само че беше така - C# Basics, Java Basics, HTML Basics, JS Basics, PHP Basics, OOP - на 4 езика едно и също и после ООП на C# :) Не е толкова голям проблем да не знаеш някои по-напреднали неща - курсът все пак залага повече на това да разбереш принципите на ООП като наследяване, абстракця, полиморфизъм и енкапсулация от колккото на това какъв е най-лесният начин да филтрираш колекция или да я копираш :) Делегати, събития и екстеншън методи не са пряко свързани с концепцията на ООП, а са специфични неща за C# езика. Ако на човек му е трудно да го схване на този етап е по-добре да го пропусне, когато събере повече теоретична и практическа база със C# да се върне и да ги научи - евентуално записвайки ООП с друг випуск или гледайки клипчетата на тези лекции.

0
DiyanTonchev92 avatar DiyanTonchev92 233 Точки

A защо трябва да е така, а не просто да се изкара първо Advanced C# и да се има базата, на която да се разбере всичко от курса, както беше при нас?

2
RoYaL avatar RoYaL SoftUni Team Trainer 6845 Точки
Адвансът е не по-малко труден от ООПто за начинаещи. Там има други новости, които са застъпени и обяснени в ООП. В случая просто е невъзможно да има отделен Advanced C# курс, тъй като трябва да се води паралелно с ООПто, а няма залата в която това да се случи. Това, че на теб да речем ти е било по-лесно първо Advanced C# и после OOP не означава, че това непременно е рецептата за успех :)
0
galin.s avatar galin.s 11 Точки

тва, че на някого му е по лесно едно, по трудно - друго и че за всекиго е различно - ясно.
лично моят проблем е с лекциите, щото основното в тях са примери. когато 70% от примерите включват материал, който не съм учил и упражнявал - коефициентът на полезност на лекцията при мен почва да клони към минус безкрайност.
така, след всяка лекция, от която я съм разбрал 30%, я - не, почвам да уча три глави от книгата на Наков и ко. (евала на целия колектив за нея) - една глава, която е настоящата лекция, и 2 глави материал от адвансд. което, от една страна, не е лошо, щото е ясно, че в основата на тая работа са самоподготовката и нонстоп гугъл-консултации, ама пък от друга страна - като нямам полза от лекциите.. сещаш се :)

п.п.
последната лекция я спрях по средата и даже няма да я доглеждам. пак по същата причина.

4
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Аз ти предлагам освен да гледаш решени задачи да се опиташ и да решаваш колкото се може повече задачи. Рутината идва с практиката. При процеса на решаване на задачи ми се изясниха доста неща. 
А иначе определено си е трудно. Но трябва и доста труд.
Аз лично отделих цялата минала седмица (че и днес сутринта) единствено за лекцията Defining Classes. По горе-долу 9 часа на ден. Чак днес започвам Static Members. Цяла седмица се занимавах с: двете глави от книгата на Наков (Създаване на обекти и Дефиниране на класове, втората покрива и static members, както и други неща като шаблонни класове), реших им всички задачи, изгледах им видеата, изгледах видео на Наков от предишна инстанция на курса ООП, изгледах видеото на Royal от тази инстанция и чак вчера си реших домашното. И горе-долу май ми се изясниха нещата, но със сигурност като започна да решавам задачи ще излезе още някоя спънка.
Със сигурност комбинацията теория, после решаване на задачи, после пак теория ми помага. На някой може да му се струва, че съм отделил прекалено много време, но пък толко си мога. Ако не схващам бързо, поне гледам да компенсирам с усърдие. 
Един плюс от цялата работа - после курса Advanced C# ще ти се стори лесен, ще можеш да отделиш време за други работи да научиш в аванс. Примерно.

5
23/11/2015 12:59:45
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Ако бяхме минали Advanced C#, вероятно щеше да ни е от полза. Но с ООП мисля, че началната трудност идва именно от ООП концепцията. Аз се чувствам, както когато за първи започнах сериозно да се занимавам с програмиране преди 3 месеца. Вероятно защото досега се учихме на процедурно програмиране с елементи на ООП, а сега тепърва започваме ООП парадигмата. Да избутаме в началото, после ще тръгне. Трябва да превключиш, като рекурсията например също така. Тя на мен чак след 2 седмици ми "прещрака", докато си вървях на улицата. Е, примера с рекурсия може би не е съвсем уместен в случая, но все пак.

0