Полиморфизъм на Delphi - Блогове на общността - Общността на Embarcadero

Обяснението е майка на ученето

На територията на българоезичната част на земното кълбо се разпространяват масово хартиени книги на Delphi. Предлагат се и чисто електронни издания. Държа книга за Delphi, има над 1024 страници. Думата полиморфизъм е посветена на 5 реда. Компонент TButton - 96 реда + 2 фигури, включително 2 примера в изходния код. Разбиране на бутоните

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

Северно сияние

Вероятно обяснението на нещо трябва да започне с определение. Няма излишък в управлението на полиморфизма: има малко дефиниции и е почти невъзможно да се разбере значението на съществуващите. Не мислете, че това е характерна черта на полиморфизма.

Езотерика

Задайте въпрос относно полиморфизма на приятел, учител, интернет и т.н. и ще разберете, че това знание е езотерично. Ще ви бъде казано много от всичко по темата „първо трябва да работите като полиморфист една година и тогава ще разберете“. А книжната версия на текста ще завършва с контролната фраза „. за решаване на два или повече подобни, но технически различни проблема. Всъщност програмирането е инженерна наука, чудесата и креативността започват още на базата на лесно обясними концепции. Без езотерика.

От висотата на надбягването на мишката

Трябва да се разбере, че разширенията и промените в езика за програмиране, добавянето на нови парадигми (капсулиране, наследяване, полиморфизъм) имат много специфични цели от гледна точка на разработчика. Малко се интересуваш от философията (или езотериката) на автоматичната скоростна кутияв колата. Решава конкретен проблем. Полиморфизмът решава и конкретен проблем.

Какъв проблем решава полиморфизмът

Какви проблеми имат разработчиците? Не, полиморфизмът не решава проблема със заплатите. Поне не директно. Но с помощта на полиморфизма можете да създавате хубави големи програми, като минимизирате сложността на кода. И кой се нуждае от прост, но мощен код? Вероятно всички. За да се почувства програмист щастлив с качествен собствено разработен код. Към потребителя, за да не изпраща ругатни в пространството за следващия бъг. Човек, който плаща заплата на програмист, т.к простият, но мощен код е по-лесен и по-бърз (да се чете: по-евтин) за поддържане, модифициране и развитие. Добре, отговорете на въпроса защо "е лошо да се използват глобални променливи". Смисълът на отговорите на тези два въпроса е много близък.

Полиморфизмът не е задължителен

- Възможно ли е да не се използва полиморфизъм?

- Със сигурност! Преди полиморфизмът като програмна парадигма хората са се справяли без него. Но няма смисъл да не се използва това, което вече е измислено и е достъпно за разбиране.

- Ами ако използвам полиморфизъм, но не знам за него?

- Може би. Но най-вероятно използвате обектно-ориентиран код на някой друг, който използва полиморфизъм в основата си. Това се случва с програмистите на Delphi през цялото време.

- Попитах моя приятел, професионален програмист, за полиморфизма. Той отговори уклончиво. Какво, той не знае?

- Знае. Но е трудно за обяснение. Затова се появи този пост (за да не каже някой, че Delphi умножава незнаещите програмисти).

Вече прочетох многото писма, но не усетих стойността на тази публикация

А аз - да пиша! Но какво можете да направите, ако в книгите за Delphiмногократно по-малко редове са посветени на това, отколкото на описанието на свойствата на компонента TLabel. В края на краищата е необходимо да го разгледаме подробно.

Добре благодаря. Полиморфизмът е навсякъде. Той е около нас. Накъдето и да погледнем, всичко е пропито с полиморфизъм. Вие вече го използвате. Просто не знаехте как се казва преди.

Диригентът размаха палката. Оркестърът удари симфония (героична, в чест на завършването на проекта за въвеждане на нов софтуер). Цигуларят изчурулика, тромпетистът свиреше, китаристът дрънкаше. Инструментите на всеки са различни, нотите на всеки са различни, техниката на свирене на всеки е различна. Но всички започнаха да издават звуци.

На сутринта отидох в кухнята. Пуснах кафемашината, включих микровълновата, пуснах стерео уредбата. Всяка единица започна да работи по различен начин, но всички имат бутон "включване", който води до ". решаване на два или повече сходни, но технически различни проблема” (това е определение от книгата, сега става по-... не, не разбираемо, но нагледно).

Генералът извика силно, а в слушалките на войниците от 21-ви век отекна силно „огън“! Картечарят стреля с автомата си. Гранатометът е стрелял с базука. Артилеристът дръпна въжето. Виртуалният боец ​​натисна бутона на джойстика.

Къде е полиморфизмът

За да обясните на човек какво е въздух (има ниска плътност, прозрачен е, трудно е да го докоснете), е необходимо временно да блокирате достъпа му. Въздухът не е празен. Нека се опитаме да отменим достъпа до полиморфизма.

Шефът влиза в офиса. И той започва трескаво и хаотично да мърмори: „секретар - попълнете текста“, „мениджър - обадете се и преговаряйте“, „адвокат - работа с документи“, „програмист - направете поне някакъв бизнес (все още не знам какво правите)“.

Диригентът има много ръце, всяка от които води отделни групимузиканти.

Кафемашина, микровълнова фурна, стерео уредба имат различни бутони за включване (ръкохватки, лостчета, превключватели, превключватели с различни икони).

Общ. сами се досетихте. Един от критичните случаи на полиморфизъм. Но полиморфизмът в армията помага да се печелят битки.

Скучно

Но е разбираемо. Програмирането е много скучно занимание. Като живот в офиса, правене на музика и правене на закуска. Военните определено са по-забавни. Ако тази война е война на компютъра.

Играем компютърна игра. Разбира се, в "стратегията" на фантастичния свят. С един замах бяха избрани няколко отряда: стрелци на орки, пехотинци на гоблини, арбалетчици на циклопи, елфи-бъглери (за повдигане на духа) и се преместиха на обща точка - да атакуват врага. Но нито дърветата, нито сградите се открояваха и не атакуваха врага. Важен извод: полиморфизмът работи при някои хора, но не и при други.

Друг пример за селективния ефект на полиморфизма на бацила. Когато диригентът размахва палката си, само музикантите издават звуци. Публиката е предимно мълчалива. Не всеки прие командата „започна да изпълнява музикално произведение“.

Спрете доставката, искам да програмирам

Искате ли да подредите "Северно сияние на ръка"? Първо трябва да видите как го правят възрастните. Имам предвид как възрастните "правят полиморфизъм". Но първо, едно предупреждение. Както вече се съгласихме, полиморфизмът е полезен (и визуален) в случай на сложен код. Следователно да се даде прост пример е нереалистично. Следователно горният пример ще бъде малко по-сложен от включването на кафеварката. Но е по-лесно от свиренето на цигулка. Някъде на ниво „карай гоблини по картата“.

Нека заедно търсим полиморфизма. Първо, нека използваме преводача от Delphi на български.

армия! Пребройте по ред!Започнете да номерирате от 0! За всеки един от избраните бойци в моята армия! Атакувайте целта на (x, y)!

Къде е полиморфизмът? Само на едно място. Където "всеки избран боец ​​да атакува точката." Ако разбирате разликата между "боец" и "гоблин" ("орк" или "елф"), тогава виждате полиморфизъм. Ние се обръщаме към всички тези достойни герои не чрез тяхната типова принадлежност като „хей, ти, елф номер 13, атакувай точката (x, y)“, а по различен начин. Полиморфен.

Домакинските уреди ги пускам с един и същ бутон за всички. Наричам техния метод "включване", действащ полиморфно. Разработчиците на устройствата не усложниха живота ми с различни методи за превключване. Правим същото, но в програмен код.

Полиморфизмът не може да бъде толкова прост

ах! Просто полиморфизмът е „самата простота“. Но без полиморфизъм животът на програмиста би бил по-труден. Например горният код без полиморфизъм би бил както е показано по-долу.

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

Бих искал сам да напиша полиморфен код

Полиморфизъм вDelphi

Полиморфният код в Delphi може да се различава от подобни техники, използвани в други езици за програмиране. Ако използвате C++ Builder, тогава кодът ще бъде различен, но само на външен вид, но не и по същество.

А какво да кажем за самия Delphi отвътре? Не е толкова лесно, колкото мнозина пишат за това. Например,

колкото и да е странно, това никога не е илюстрация на полиморфизъм!

Нарушение на полиморфизма

Среща се постоянно. И това не е признак на нисък професионализъм, небрежност или злоба. Понякога това е жизненоважно. За какво? Отговорочевидно: за улесняване на сложния код (déjà vu, вижте по-горе). Оттук едно просто заключение: техниките за програмиране, парадигмите, моделите на проектиране нямат някаква абсолютна стойност, но опростяват кода в рамките на конкретна задача. Точно поради тази причина обяснението на полиморфизма е невъзможно извън конкретна задача без демонстриране на сложен код.

Защо и как

Защо е повече или по-малко ясно. Трябва да направим кода по-прозрачен и по-близо до начина, по който хората мислят. И това, и това е "намаляване на разходите за модифициране на системата" (по отношение на разработката).