Форум за съобщения и дискусии по лекционните теми

Теми за онлайн дискусии към модул 2

Теми за онлайн дискусии към модул 2

by Боян Бончев -
Number of replies: 2

Здравейте, колеги,


Благодаря на колегите, които коментираха темите за дискусия по модул 1 - съгласен съм с написаното. Понеже по-голямата част от вас не посещават лекциите, приканвам ви да участвате АКТИВНО в дискусиите по темите на лекционните модули. Ето какви теми ви предлагам за онлайн дискусии към модул 2:


1. Кога е удачно да се използва method overloading и кога method overriding в ОО езици? Дайте конкретни примери.

2. Дайте примери (вкл. и с използване на ОО шаблони за проектиране), където е за предпочитане да се използва абстрактен клас вместо интерфейс. Приведете доводи в полза на твърдението си, като удобство при използване, при поддръжка, изграждане на йерархии от подкласове, бързодействие, изпозване на готови интерфейси и др.

3. Какво отличава шаблоните за анализ (analysis patterns) от шаблоните за проектиране? 


Можете да предлагате и други теми за дискусии. Поздрави,

Боян

In reply to Боян Бончев

Re: Теми за онлайн дискусии към модул 2

by Захари Тасков -
Здравейте,

1.Method overloading -когато в един клас съществуват методи с едно и също име ,но всеки от тях има различни брой входни параметри или параметрите са от различен тип(може да са й в различен ред)
Method overriding-когато се редефинира метод/методи,който/които са били дефинирани в родителския клас.Метода/Методите трябва да притежават еднакво име,еднакъв тип на връщана стойност,еднакъв брой на параметрите и еднакъв тип на параметрите.
Method overloading се изпълнява по време на компилация,докато method overriding се изпълнява по време на работа (runtime).Method overloading е по-удачно да се използва,когато от с-мата се изисква производителност.Това е така,защото method overloading се изпълнява по време на компилация.Method overriding е по-удачно да се използва,когато от с-мата се изисква:
-лесно да се поддържа
-да се използва преизползване на код
-да бъде лесно изменяема(нефункционалното изискване за изменяемост)

Пример за overloading:
class Cabbage
{
    public void Pretakai(string zelka1,string zelka2)
    {
         System.out.println(zelka1+zelka2);
    }
    public void Pretakai(string zelka1, string zelka2,string zelka3) 
    {
         System.out.println(zelka1+zelka2+zelka3);
    }
}
Пример за overriding:
public abstract class Cabbage {
   public abstract void pretakai() ;
}

class WhiteCabbage extends Cabbage {
   public void pretakai() {
      System.out.println("Bqlo zele ima za pretakvane!!!");
   }

class RedCabbage extends Cabbage {
   public void pretakai() {
      System.out.println("Cherveno zele ima za pretakvane!!!");
   }
}

2. Абстрактен клас е за предпочитане да се използва ,когато се изисква да се дефинира шаблон за група от подкласове и съществува код,които подкласовете да използват.При чести промени на дизайна е препоръчително да се използва интерфейс.В някой езици за програмиране не е позволено множествено наследяване и там няма друг избор освен използването на интерфейс.При наследяването на абстрактни класове не е нужно да се overrideva-т всички методи,докато при имплементирането на интерфейс е задължително да бъдат имплементирани всички методи.

Пример:
 public abstract class Biscuit
{
    public void packing()
    {
       
    }
    public abstract void price();
}
public class BelvitaBiscuit extends Biscuit
{
    public void price()
    {
        System.out.println("Belvita sum i sam 1 lev!");
    }
}
public class TutkiBiscuit extends Biscuit
{
    public void price()
    {
        System.out.println("Tutka sum i sam 50 stotinki");
    }
}

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

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


Поздрави с много мощ,

Захари



Attachment C2F8L.jpg
In reply to Боян Бончев

Re: Теми за онлайн дискусии към модул 2

by Георги Пасков -

Здравейте,

1. Overloading имаме, когато ни трябва метод с подобни функции, но приемащи различен брой параметри.
Overloading е също, ако параметрите са с различен тип:
int overloadedMethod(int count) {
}
int overloadedMethod(double money){
}
Възможно е също методите да връщат различен тип параметър, но само ако имат разликата в приетите параметри:
int overloadedMethod(int count) {
}
double overloadedMethod(double money){
}
Overloading-a се случва в compile-time.
Overriding може да има само при наследяване.
Приетите параметри трябва да са винаги същите.
В overridden method трябва да върнем нещо от същия тип или нещо по-специфично(пак при наследяване).
Overriding-а се случва в run-time(според типа на обекта се извиква нужния метод).

2. Абстрактни класове (наследяване) използваме, когато искаме да дадем характеристики на обект от даден тип(Какъв е обекта? - "IS A" ).
Класовете могат да имат абстрактни и не-абстрактни методи.
Само абстрактните са задължителни за имплементиране от подкласа.
Методите могат да има съдържание (body).
 
Интерфейса ни дава възможностите, които един обект може да извършва (Какво може да прави обекта? - "HAS A").
Всички методи трябва да бъдат имплементирани.
Методите са само дефиниране и не могат да имат съдържание.
 
По въпроса за използването им - най-точният отговор е "зависи".
Ако искаме да имплементиране всички методи е по-удачно да използваме интерфейси.
Ако искаме частично - абстрактни класове.

3. Според Wikipedia: 
"Шаблоните за анализ са софтуерни и идейни модели, които абстрактно представят решение на често срещани проблеми.
Основните приложение на шаблоните са да представят надеждно решение на проблема (и чрез примери) заедно с предимствата и недостатъците му."

Поздрави,
Георги