Книга е още в много ранна фаза на написване



страница8/73
Дата25.07.2016
Размер13.53 Mb.
#6732
1   ...   4   5   6   7   8   9   10   11   ...   73

1: Въведение в обектите


Защо обектно-ориентираното програмиране има такова ударно влияние върху програмистката общност?

Обектно-ориентираното програмиране е привлекателно на много нива. За ме­на­же­рите то обещава по-евтини и управляеми проекти. За аналистите и про­ек­тан­ти­те процесът се опростява и става по-управляем. За програмистите еле­гант­ност­та е привлекателна, а също и повишената производителност, те могат да експе­риментират и да я увеличат още повече. Види се, всички печелят.

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


  1. Да избере език като Smalltalk при което трябва да изучи много и големи библиотеки докато стане продуктивен.

  2. Да избере C++ с фактически никакви библиотеки1 и да се бори с дъл­бо­чи­ни­те на езика поради нуждата да пише свои собствени библиотеки.

Да се правят хубави обекти е наистина трудно – ако е въпросът, трудно е да се на­прави добре каквото и да е. Намерението е обаче няколко добри проектанта да произведат обектите, които други ще използват. Успешните ООП езици пред­лагат не само синтаксис и компилатор, но и програмна среда с добре раз­ра­ботени библиотеки. По този начин най-първата задача на повечето про­гр­ами­сти е да използуват тези обекти. Целта на тази глава е да покаже какво е това ООП и колко просто може да бъде.

Тази глава ще въведе много от идеите на Java и обектно-ориентираното про­гра­ми­ране, но да сте наясно, че още няма да можете да пишете завършени Java след четенето на тази глава. Всичките детайлни описания и примери ще се дават с течение на курса.


Абстракцията


Всички програмни езици доставят абстракция. Може да се спори дали слож­ност­та на проблемите, които може да се решават зависи от вида и качеството на аб­стракцията. Под "вид" лазбирам: от какво се абстрахираме в рамките на ези­ка? Езикът асемблер е малка абстракция на лежащата отдолу машина. Много от по­следвалите т.н. "императивни" езици (като FORTRAN, BASIC и C) бяха абстракции на асемблера. Тези езици са голям напредък в сравнение с асемблерите, но и при тях все още се налага да се мисли в термините на ма­ши­на­та, наместо на решавания проблем. Програмистът трябва да прокара съот­вет­ствие между машинния модел" (в "пространството на решенията) и модела на фак­тически решавания проблем (в "проблемното пространство"). Усилието, необ­ходимо за това, което е външно за решавания проблем, довежда до про­гра­ми, които са скъпи за произвеждане и трудни за поддържане, а като страничен ефект се получава цяла индустрия на "програмните методи".

Алтернативата на моделирането е моделиране на решавания проблем. Ранните ези­ци като LISP и APL избраха конкретни свои гледни точки към света (“всич­ки проблеми са списъци” и “всички проблеми са алгоритмични”). PROLOG свежда всички проблеми до вериги от решения. Бяха създадени езици за про­гра­миране на/с ограничения и за работа изключително със знаци. (Последните се доказаха като твърде ограничителни.) Всеки от тези езици е добър за реша­ва­не на конкретния вид проблеми, за който са създадени, но стават тромави при все­ки опит да се надникне навън.

Обектно-ориентирания подход прави стъпка по-нататък с даването на въз­мож­ност да се моделират отделни части от проблемното пространство. Това представяне е толкова общо, че не поставя никакви огрраничения върху вида на решавания проблем. Ние се отнасяме към нещата в проблемното про­стран­ство от пространството на решенията като към "обекти". (Разбира се, ще са нуж­ни и обекти, които нямат аналози в проблемното пространство.) Идеята е про­грамата на може да се настройва към езика на проблема чрез въвеждане на но­ви типове обекти така, че като четете кода който представлява решението му, да четете думи, които описват проблема. Това е по-гъвкава и мощна абстракция от всички предишни. Така ООП позволява да се опише проблема в термините на проблема, а не на решението. Има обаче връзка и с компютъра. Все­ки обект изглежда мъничко като отделен компютър; има състояние, има опе­рации, които може да се поръчат да изпълни. Това обаче не изглежда лоша ана­логия на обектите от реалния свят; те всички имат своя характеристика и поведение.

Alan Kay сумира петте основни характеристики на Smalltalk, първият успешен ООП език и един от тези, на които е основан Java. Тези характеристики пред­ставят подхода на ООП в чист вид:



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

  2. Програмата се състои от обекти, които си каз­ват един на друг какво искат да правят чрез съ­об­­щения. За да поръчате нещо на обект му изпращате "съобщение". По-конкретно, за съобщението може да се мисли като за извикване на кон­кретна функция от конкретен обект.

  3. Всеки обект си има своя собствена памет по­пълвана от други обекти. Или, прави се нов вид обект като се па­кетират съществуващите обекти. Така може да построите сложността на про­грамата скривайки я зад простотата на обектите.

  4. Всеки обект има тип. Всеки обект е екземпляр на клас, където “клас” е синоним на “тип.” Най-отличаващата характеристика на даден клас е “какви съобщения може да му се пращат?”

  5. Всички обекти от даден тип могат да приемат ед­ни и същи съобщения. Фактически това е пресилено твър­де­ние, както ще видите по-нататък. Понеже обектът от тип кръг е също и от тип фор­ма, кръгът гарантирано приема съобщенията за форма. Това значи че като на­пишете код който говори на формите автоматично включвате всичко, което има форма. Тази заменяемост е една от най-мощните концепции на ООП.

    Някои проектанти са решили, че ООП не решава проблемите и адвокатстват на ком­бинацията на няколко подхода в многопарадигмените програмни езици.2





Сподели с приятели:
1   ...   4   5   6   7   8   9   10   11   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница