Как се ползват няколко конструктура и защо?

+6 гласа
90 прегледа
попитан 2016 май 3 в Обща дискусия от Suzana.Velcheva. (1,250 точки)

Какъв е смисъла от използване на няколко конструктура за един и същ клас? А как и защо се използва извикването помежду им?

2 отговори

+2 гласа
отговорени 2016 май 3 от valeri.hristov (7,340 точки)

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

class Car

{

    private string ownerName;

    private decimal price;

}

По подразбиране имаш празен конструктор:

public Car()

    {

    }

В такъв случай при създаването на нов обект Car с този конструктор, неговите полета ще останат с default-ните стойности. Но можеш и да имаш следното:

    public Car(string ownerName) : this(ownerName, 0)

    {

    }

    public Car(decimal price) : this("", price)

    {

    }

    public Car(string ownerName, decimal price)

    {

        this.ownerName = ownerName;

        this.price = price;

    }

В зависимост от това кои данни те интересуват при създаването на обекта, ти можеш да подаваш различни параметри, а другите остават със стойности по подразбиране. Можеш да извикаш

        Car first = new Car(); // ще има „“ за собственик и цена 0

        Car second = new Car("Ivan Ivanov"); // собственик ще е Ivan Ivanov, цената ще е 0

        Car third = new Car(15000);// собственик ще е „“, а цената ще е 15000

        Car forth = new Car("Vasil Vasilev", 20000);// собственик ще е Vasil Vasilev,а цената ще е 20000

Извикването става чрез this и идеята му е да се пести код. Освен това във всеки конструктор можеш да добавяш още код.

+2 гласа
отговорени 2016 май 3 от kristiyandev (740 точки)
редактиран 2016 май 3 от kristiyandev

За да е по ясно: Давам пример с PHP и допълвам горния отговор на колегата.

В PHP за разликата от други C-подобни езици имаш само един конструктор, другите се извикват от главния.

Основната идеята на това да имаш повече от един е броят аргументи, които подаваш. Както може би знаеш, освен нормалния начин с ($arg1,$arg2...) можеш да вземеш динамично отделните аргументи с func_get_args().

Давам ти линк към пример: http://php.net/manual/en/language.oop5.decon.php#99903

Сега остава въпроса: защо всъщност трябва да се ползва такова нещо?

Както може би се досещаш в един клас конструктора е публичен метод и на 99% може да се достъпи отвън, другите методи може да са частни (private), така ако искаш да имаш 2-3 workflow-а според броя параметри можеш да ползваш този метод.

В PHP това естествено не е точно това, което е при java, затова най-вероятно ще ти изглежда като нещо ненужно и може да стане с обикновени методи (каквото всъщност са).

Общата идея е абстрактност и гъвкавост на кода.

коментиран 2016 май 5 от Suzana.Velcheva. (1,250 точки)
Благодаря за примера ;)
...