Здравейте,
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.Шаблоните за анализ служат за създаване на домейн архитектурата,а шаблоните за проектиране са имплементационен механизъм за някакъв аспект от домейн архитектурата.Шаблоните за анализ са ориентирани функционално и към крайния потребител.Шаблоните за анализ дефинират какъв е проблема,а шаблоните за проектиране казват как да бъде решен той.
Поздрави с много мощ,
Захари