41

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

reverse2500 написав:

а давайте проведемо опитування, шо легче ассемблер чи ООП ?

Для альтернативно обдарованих і те і те недосяжні вершини. А якщо розбираєшся, то розумієш користь від обох. І де обоє використовуються.

42

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

P.Y. написав:
koala написав:
fed_lviv написав:

:D  Так зазвичай і виглядають перші програми. Звичайно, якщо людина перед тим не вивчала ООП.

І коли вивчала - теж. Бо перші.

Ну а для чого ООП в хеловорді чи сортуванні масиву методом бульбашок? Теорія ООП в принципі не пропонує юзабельних простих прикладів, що наочно демонструють переваги ООП (як я сказав вище, моделювання реальних об'єктів — не основне призначення ООП, і об'єкт з методом, що пише «кря-кря», моделлю качки є тільки з точки зору теоретиків ООП).

Собаки й котики недостатньо абстрактні, щоб на них демонструвати ООП. А абстрактні поняття розлякують аудиторію, іншого пояснення я не можу придумати.

43

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Чому б не демонструвати можливості ООП на прикладі колекцій (напр., абстрактний список, що може мати реалізації в вигляді однозв'язного списку, двозв'язного списку, масиву і т.д.)? Цілком реальне застосування і не надміру абстрактне.

Подякували: leofun011

44

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Я б порадив вчити ООП на абстракціях типу кіт і пес. Пес має вуха, і кіт їх має, але пес гарчить а кіт мявкає. З цьго виходить що метод voice буде реалізований по іншому.

#include <iostream>
using namespace std;

class Skotyna {
public:
    virtual void say() = 0;
    virtual ~Skotyna() {}
};

class Sobaka : public Skotyna {
public:
    void say();
};

void Sobaka::say() {
    cout << "Gau!" << endl;
}

class Kotiara : public Skotyna {
public:
    void say();
};

void Kotiara::say() {
    cout << "Miau!" << endl;
}

class Man : public Skotyna {
public:
    void say();
};

void Man::say() {
    cout << "Suka Nahui!" << endl;
}

int main() {
    Skotyna * pSkot = new Kotiara;
    pSkot->say();

    pSkot = new Man;
    pSkot->say();

    delete pSkot;
}
Подякували: Анатолій1

45

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Цей приклад не демонструє доцільності застосування класової ієрархії замість чогось простішого:

cat_voice="Miau"
dog_voice="Gau"
man_voice="Suka nahui"

skot_voice=cat_voice
print(skot_voice)
skot_voice=man_voive
print(skot_voice)

Можна спокійно обійтися самою зміною даних, бо «моделі» працюють за одним і тим же алгоритмом.

Подякували: leofun011

46

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Справжнє призначення ООП — дати можливість маніпулювати структурно різними даними, використовуючи узагальнений зовнішній інтерфейс. Власне, прикладом елементів ООП в чистих процедурних мовах (таких як Сі чи Паскаль) є файли. З точки зору прикладної програми, яка працює з файлами, нема особливої різниці між файлом на жорсткому диску чи змінному носії, консоллю, інтерфейсом вводу-виводу іншої програми, приєднаної через пайп: будь-який «файл» підтримує одні й ті ж методи для читання і/або запису, внутрішня реалізація яких, проте, в кожному випадку відрізняється. Що це нам дає? Скажімо, програму, що виводить результат роботи на екран, можна легко переробити, щоб вона виводила цей результат у файл або на принтер — просто відкривши інший файл замість стандартного виводу. Без абстракції «файл», звичайно, можна обійтися — записувати дані в відеобуфер чи працювати з портами вводу-виводу дискового адаптера — але, крім того, що це для прикладного програміста складно, переписувати такий код, щоб змінити пристрій виводу, буде набагато довше.

Якщо для прораміста на процедурних мовах внутрішня реалізація файлів здебільшого лишається «чорною скринькою», то в ООП прийнято якраз і займатися розробкою подібних скриньок, для чого надається увесь необхідний інструментарій.

Подякували: leofun01, Анатолій, tatomyr813

47

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Приклад з голосами тварин настільки ж невдалий, наскільки невдалий приклад з місяцями для switch ("вивести назву місяця за його номером"). Мені значно більше подобається геометрія: площа фігури обчислюється за різними формулами для різних фігур. Або (для любителів цієї справи) RTS: основний цикл буде виглядати приблизно як

for actor in Scene.getActors()
    actor.plan()
for actor in Scene.getActors()
    actor.act()

а методи plan() та act() визначаються окремо для різних класів дійових осіб.

Подякували: tatomyr811

48 Востаннє редагувалося Анатолій (26.02.2016 10:05:03)

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

diogen написав:

Я б порадив вчити ООП на абстракціях типу кіт і пес. Пес має вуха, і кіт їх має, але пес гарчить а кіт мявкає. З цьго виходить що метод voice буде реалізований по іншому.

Прихований текст
#include <iostream>
using namespace std;

class Skotyna {
public:
    virtual void say() = 0;
    virtual ~Skotyna() {}
};

class Sobaka : public Skotyna {
public:
    void say();
};

void Sobaka::say() {
    cout << "Gau!" << endl;
}

class Kotiara : public Skotyna {
public:
    void say();
};

void Kotiara::say() {
    cout << "Miau!" << endl;
}

class Man : public Skotyna {
public:
    void say();
};

void Man::say() {
    cout << "Suka Nahui!" << endl;
}

int main() {
    Skotyna * pSkot = new Kotiara;
    pSkot->say();

    pSkot = new Man;
    pSkot->say();

    delete pSkot;
}

за написання  частини коду дякую, але варто було б дещо етичніше з іменами

49

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

не варто запутувати людину  ООП власними прикладами і як зрозумів
моя думка така:
1. Треба дати приклад в тому що людина більше розбирається, тому є і різні приклади ООП зрівнюють з машиною, котами фріскі ...
2. С++ це дуже запутано як для новачка, варто почати з JAVA
3. Треба спочатку розібратися хоч з С, саме чистим С, та потім переходити на ООП

50

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Якщо розглядати/вивчати парадигму ООП, то здається було б логічно задати питання за місце ООП а сфері програмування;
переглянув то їх там з десяток буде...
точніше якщо наразі вона(парадигма ООП) популярна в неї більше переваг чим недоліків

то чи можна було б стверджувати, що ООП це результат еволюції програмування від машинного коду

http://не-дійсний-домен/pictures_06/paradigms_grows.jpg

чи все ж варто сказати що кожна парадигма програмування розвивається паралельно?

http://не-дійсний-домен/pictures_06/how_paradigms_grows.jpg

І таке змістовне питання: - Які на Ваш погляд суттєві переваги ООП порівняно з іншими, а які є недоліки ООП?

Наприклад зустрів ось такий висновок:

Переваги застосування ООП:

Об'єктно-орієнтовний підхід допомагає справитись з такими складними проблемами, як зменшення складності програмного забезпечення; підвищення надійності програмного забезпечення; можливість модифікації окремих компонентів програмного забезпечення без зміни інших його компонентів; забезпечення можливості повторного використання окремих компонентів програмного забезпечення.
Недоліки ООП

Часто згадуваним недоліком об'єктно-орієнтованого підходу є неможливість локалізації наскрізної функціональності в одному класі. Як приклад такої функціональності часто називають необхідність ведення журналів подій, керування винятковими ситуаціями, перевірку прав доступу. Код, що відповідає за дану функціональність, часто розкиданий по різних класах.

чи навіть таке сочне яскраве переконання зручності ООП :)

leofun01 написав:

Скажу так: ООП не є необхідністю, для того щоб створити програму, але коли отримаєте завдання на розробку великого проекту, то без ООП ваші пальці будуть в крові, або мозок носом витече, або життя не вистачить на завершення проекту.

:) :) :)

Хоча просто можна сказати ООП то зручно і його варто вивчити, ... а з часом буде популярне, скажімо аспектно-орієнтовне (чи яка там парадигма виграє еволюційний тендер)

Подякували: leofun011

51 Востаннє редагувалося Engineer (26.02.2016 21:35:08)

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Суперечки про найкращу парадигму програмування схожі на пошук "золотого ключика", що мав би відчиняти всі двері. Хоча кожна наступна парадигма виростає на базі попередніх, все одно немає універсальної парадигми для застосування в усіх випадках життя. Кожна з них має свою область застосування. Ніхто при здоровому глузді не буде програмувати мікроконтролер за домопогою ООП чи АОП або писати веб-портал на асемблері. Так само розробляти важку ERP систему набагато зручніше за допомогою ООП аніж процедурного програмування, а розробку багатопотокових систем легше вести в функціональній парадигмі. Хоча ці парадигми часто використовуються одночасно. Наприклад в ООП розробка окремого класу це є фактично процедурне програмування.
Так що вивчайте ті інструменти, що дадуть вам змогу найефективніше вирішувати ваші задачі і не журіться про інші. Адже все одно вся наша писанина в кінцевому результаті перетворюється в машинний код, незалежно від усіляких парадигм :)

Подякували: ktretyak, Анатолій, leofun013

52

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Ніхто при здоровому глузді не буде програмувати мікроконтролер за домопогою ООП

propeller paralax не чули ?

або писати веб-портал на асемблері

ну думаю збоченці найдуться, або вже є

Подякували: leofun011

53

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

reverse2500 написав:

Ніхто при здоровому глузді не буде програмувати мікроконтролер за домопогою ООП

propeller paralax не чули ?

або писати веб-портал на асемблері

ну думаю збоченці найдуться, або вже є

propeller paralax тільки чув краєм вуха. мікроконтролери я мав на увазі найпростіші, які я вчив купу років тому і більше з ними не працював, для керування якимось пристроєм типу двигуна чи якогось виконавчого механізму або зчитування показів групи датчиків. Тому можливо краще було би не наголошувати на мікроконтролерах, а написати що ПЗ для керування роботизованою системою краще розробляти, використовуючи парадигму ООП. А для програми керування якоюсь засувкою на трубопроводі вистачить і простих процедур.

54

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

та  і AVR теж є  на С++

55

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

OOP все ж таки краще ніж PHP.

56 Востаннє редагувалося Анатолій (03.03.2016 22:51:45)

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Працюю над власними нотатками

І хотів би створити гарний наочний малюнок, наприклад, по-кроково розглядати поняття ООП,

чи підійшов би за змістом ось такий малюнок?
На даному малюнку хотів би представити поняття "клас та обєкт", та здається взаємозв'язки (обмін інформацією) між обєктами програми, напевно ж чуть варто було б по іншому вказати.
Так як $Some_object_name_A = new A; - це просто створення* нового об'єкту певного класу, а обмін інформацією між обєктами все ж вже в подальших кроках програми.

http://не-дійсний-домен/pictures_06/class_and_object.png

- Можливо за даним малюнком  якийсь суттєвий елемент варто було б вказати?

57

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

diogen написав:

OOP все ж таки краще ніж PHP.

щось тут не зрозумів, що значить ООП краще за PHP? PHP підтримує ООП. Наприклад в контексті баз даних
тобто ООП в PHP є, і Ваше речення для мене звучить як "ООП все ж краще ніж ООП"

Подякували: leofun011

58

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

Клас - то насправді взагалі необов'язкове поняття в ООП, багато мов використовують замість класів прототипи. Різниця в тому, що прототипи об'єктів можна змінювати динамічно.
Якщо хочете показати стосунки між класами та об'єктами, то створіть хоча б один клас-нащадок (наприклад B extends A) і напишіть, що $Some_object_name_B є об'єктом класів A і B одночасно.
Крім того, ви не розділяєте проголошення і створення. Так, $objectA - проголошення, а = new A(); - створення. Створений об'єкт не прив'язаний до своєї змінної:

$objectA = new A();
$otherA = objectA;//тепер $objectA і $otherA вказують на один і той самий об'єкт
$objectA = new A();//тепер $objectA вказує вже на інший об'єкт класу A, 
//а $otherA вказує на той об'єкт, що первинно був $objectA
Подякували: diogen, leofun01, Анатолій3

59

Re: Обєктно Орієнтовне програмування. Його взагалі можна зрозуміти?

@ Анатолій
Не тільки наслідування. Також властивості класів : тобто наприклад будь-яка властивість (data member) класу С може бути обєктом класу А і ви можете з методів класу С звертатися до цієї властивості (обєкт класу А), використовуючи його доступні властивості і викликаючи доступні методи. Також в будь-яких методах будь-якого класу можна створювати змінні - обєкти інших класів і працювати з ними в межах методу чи передавати в якості вхідних або вихідних параметрів. Ви це мали на увазі коли писали про "взаємозвязки (обмін інформацією) між обєктами програми" ?

Подякували: Анатолій1