Основні аспекти
Серед найважливіших програмних понять і принципів виділяються поняття композиції і принцип композиційності, який тлумачить програми як функції, що будуються з інших функцій за допомогою спеціальних операцій, названих композиціями. Принцип композиційності став основним в композиційному програмуванні. Композиції класифікуються рівнями даних і функцій, а також типами аргументів. Експлікація композицій відповідає абстрактному розгляду функцій як слабоаплікативних функцій, а їх уточнення будується на основі поняття детермінанта композиції як відображення спеціального типу. Клас аплікативних композицій призначений для конструювання широкого класу програм.
Наукова школа
Школа програмології та її застосувань
Наукові керівники школи — Редько Володимир Нікіфорович, доктор фізико-математичних наук, професор, академік НАН України, Нікітченко Микола Степанович, доктор фізико-математичних наук, професор, завідувач кафедри теорії та технології програмування.
Основні напрями наукових досліджень: композиційне програмування та його сучасні варіанти (експлікативне та еталонне програмування) — теорії дескриптивних та декларативних програмних алгебраїчних структур, які виступають формальними та адекватними моделями структур даних, програм та засобів їх конструювання; теорія композиційно-номінативних логік, орієнтованих на моделювання предметних областей та специфікацію програмних систем; теорія баз даних та знань; теорія абстрактної обчислюваності; розробка наукомістких інформаційних технологій та систем різноманітного призначення.
Композиційний підхід в об'єктно-орієнтованому програмуванні
Ще однією особливістю об'єктно-орієнтованого програмування є можливість реалізовувати так званий композиційний підхід. Полягає він в наступному: є клас-контейнер, який включає в себе виклики інших класів. У результаті виходить, що створюючи об'єкт класу-контейнера, ми одночасно створюємо і об'єкти включених до нього класів.
Щоб зрозуміти навіщо потрібна композиція в програмуванні, можна як завжди провести аналогію з реальним світом. Так переважна більшість природних, біологічних і технічних об'єктів складаються з інших більш простих частин, по своїй суті, які також є об'єктами. Наприклад, людина складається з різних органів (серце, шкіра та ін.), Комп'ютер — з різного «заліза» (процесор, ОЗУ, диск і т. д.).
Слід розуміти, що «композиція» та «спадкування» — досить різні властивості реальних і віртуальних систем. Спадкування передбачає приналежність до якоїсь спільності (схожість), а композиція — формування цілого з частин.
Ще раз: при створенні об'єкта, що належить класу-контейнеру, автоматично створюються об'єкти-частини, з яких він ніби складається. Властивості і методи об'єктів частин визначаються в їх класах. Програмісти можуть створювати цілі колекції вбудованих класів.
Розглянемо використання композиції при програмуванні на Python за допомогою конкретного прикладу.
Опис завдання
Для початку вирішимо це завдання логічно. Кімната — це прямокутний паралелепіпед, що складається з шести прямокутників. Його площа являє собою суму площ складових його прямокутників. Площа прямокутника дорівнює добутку його довжини на ширину. Шпалери клеяться тільки на стіни, отже площі верхнього і нижнього прямокутників нам не потрібні. Площа одного прямокутника дорівнює x * z, другого — у * z. Протилежні прямокутники рівні, значить загальна площа чотирьох прямокутників буде дорівнює S = 2xz + 2yz = 2z (x + y). Потім з цієї площі треба буде відняти загальну площу дверей і вікон. Двері і вікна — це прямокутники (як обчислити їх площу має бути зрозуміло).
Створення класів-частин
Тепер приступимо до створення програми. У відповідність з досліджуваної темою написати її треба використовуючи об'єктно-орієнтовану парадигму програмування, та ще й застосовуючи «композиційний підхід».
Можна помітити, що фактично у нас є три типи об'єктів — це об'єкти-вікна, об'єкти-двері і об'єкти-кімнати. Виходить три класи. Вікна та двері є частинами приміщення, а значить можуть створюватися усередині класу «кімнати». Крім того, для даної задачі істотне значення мають лише дві властивості: довжина і ширина. Тому класи «вікна» і «двері» можна об'єднати в один. Зрозуміло, що якщо для завдання були б важливі інші властивості (наприклад, товщина скла, матеріал), то можливо варто було б створити два класи.
class Win_Door:
def __init__(self,x,y): self.square = x * y
Тут при виклику класу Win_Door буде автоматично створений атрибут square об'єкта, який є посиланням на значення площі об'єкта.
Створення класу-контейнера
Можна по-різному реалізувати клас-контейнер. Є підозра, що багато залежить від задачі, розв'язуваної програмістом, його майстерності і смаку. Класи-частини можна викликати в методі __init__, тим самим об'єкти-частини будуть автоматично створюватися при створенні об'єкта-контейнера. Проте в даній задачі ми підемо іншим шляхом: вікна і двері будуть створюватися спеціальним для цих цілей методом. Також клас повинен містити метод для обчислення площі необхідних шпалер (wallpapers). В кінці можна додати метод, в якому реалізований висновок тих чи інших даних.
class Room:
def __init__(self,x,y,z): self.square = 2 * z * (x + y) def win_door(self, d,e, f,g, m=1,n=1): self.window = Win_Door(d,e) self.door = Win_Door(f,g) self.numb_w = m self.numb_d = n def wallpapers(self): self.wallpapers = self.square - \ self.window.square * self.numb_w \ - self.door.square * self.numb_d def printer(self): print ("Площадь стен комнаты равна "\ ,str(self.square)," кв.м") print ("Оклеиваемая площадь равна: ", \ str(self.wallpapers), " кв.м")
У методі __init__ створюється атрибут square об'єкта, який представляє собою площу стін кімнати. Метод приймає три аргументи: довжину, ширину і висоту приміщення.
У методі win_door створюються два об'єкти: window і door, а також атрибути numb_w і numb_d (в останніх будуть міститися значення про кількість вікон і дверей). Якщо при виклику даного методу в програмі не буде вказано кількість вікон і дверей, то за замовчуванням будуть підставлені значення рівні 1.
Метод wallpapers обчислює площа_необхідних_шпалер = площа_кімнати — площа_вікна * кількість_вікон — площа_двері * кількість_дверей. У коді даний рядок розбит на кілька рядків за допомогою знака \ (так роблять, якщо рядок дуже довгий). Також зверніть увагу, як відбувається звернення до властивостей square об'єктів-частин: вказується об'єкт класу Room (в класі його замінює self), далі об'єкт-частина, і нарешті, сам атрибут (властивість) об'єкта-частини.
Література
1. Лаврищева Катерина Михаліївна. Підручник "Програмна інженерія". (Видавець, рік, кількість сторінок?)
Зовнішні посилання
- [недоступне посилання з 11.04.2018]
- Програмологія та її застосування [ 23 Червня 2015 у Wayback Machine.], 2013
- (рос.)Композиционный подход в объектно-ориентированном программировании. Урок 7 [ 22 Червня 2015 у Wayback Machine.]
- (рос.)Редько В.Н. Основания композиционного программирования. Журнал "Программирование" , 1979, №3: (С. 3-13) [ 20 Червня 2015 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Osnovni aspektiSered najvazhlivishih programnih ponyat i principiv vidilyayutsya ponyattya kompoziciyi i princip kompozicijnosti yakij tlumachit programi yak funkciyi sho buduyutsya z inshih funkcij za dopomogoyu specialnih operacij nazvanih kompoziciyami Princip kompozicijnosti stav osnovnim v kompozicijnomu programuvanni Kompoziciyi klasifikuyutsya rivnyami danih i funkcij a takozh tipami argumentiv Eksplikaciya kompozicij vidpovidaye abstraktnomu rozglyadu funkcij yak slaboaplikativnih funkcij a yih utochnennya buduyetsya na osnovi ponyattya determinanta kompoziciyi yak vidobrazhennya specialnogo tipu Klas aplikativnih kompozicij priznachenij dlya konstruyuvannya shirokogo klasu program Naukova shkolaShkola programologiyi ta yiyi zastosuvan Naukovi kerivniki shkoli Redko Volodimir Nikiforovich doktor fiziko matematichnih nauk profesor akademik NAN Ukrayini Nikitchenko Mikola Stepanovich doktor fiziko matematichnih nauk profesor zaviduvach kafedri teoriyi ta tehnologiyi programuvannya Osnovni napryami naukovih doslidzhen kompozicijne programuvannya ta jogo suchasni varianti eksplikativne ta etalonne programuvannya teoriyi deskriptivnih ta deklarativnih programnih algebrayichnih struktur yaki vistupayut formalnimi ta adekvatnimi modelyami struktur danih program ta zasobiv yih konstruyuvannya teoriya kompozicijno nominativnih logik oriyentovanih na modelyuvannya predmetnih oblastej ta specifikaciyu programnih sistem teoriya baz danih ta znan teoriya abstraktnoyi obchislyuvanosti rozrobka naukomistkih informacijnih tehnologij ta sistem riznomanitnogo priznachennya Kompozicijnij pidhid v ob yektno oriyentovanomu programuvanniShe odniyeyu osoblivistyu ob yektno oriyentovanogo programuvannya ye mozhlivist realizovuvati tak zvanij kompozicijnij pidhid Polyagaye vin v nastupnomu ye klas kontejner yakij vklyuchaye v sebe vikliki inshih klasiv U rezultati vihodit sho stvoryuyuchi ob yekt klasu kontejnera mi odnochasno stvoryuyemo i ob yekti vklyuchenih do nogo klasiv Shob zrozumiti navisho potribna kompoziciya v programuvanni mozhna yak zavzhdi provesti analogiyu z realnim svitom Tak perevazhna bilshist prirodnih biologichnih i tehnichnih ob yektiv skladayutsya z inshih bilsh prostih chastin po svoyij suti yaki takozh ye ob yektami Napriklad lyudina skladayetsya z riznih organiv serce shkira ta in Komp yuter z riznogo zaliza procesor OZU disk i t d Slid rozumiti sho kompoziciya ta spadkuvannya dosit rizni vlastivosti realnih i virtualnih sistem Spadkuvannya peredbachaye prinalezhnist do yakoyis spilnosti shozhist a kompoziciya formuvannya cilogo z chastin She raz pri stvorenni ob yekta sho nalezhit klasu kontejneru avtomatichno stvoryuyutsya ob yekti chastini z yakih vin nibi skladayetsya Vlastivosti i metodi ob yektiv chastin viznachayutsya v yih klasah Programisti mozhut stvoryuvati cili kolekciyi vbudovanih klasiv Rozglyanemo vikoristannya kompoziciyi pri programuvanni na Python za dopomogoyu konkretnogo prikladu Opis zavdannya Dlya pochatku virishimo ce zavdannya logichno Kimnata ce pryamokutnij paralelepiped sho skladayetsya z shesti pryamokutnikiv Jogo plosha yavlyaye soboyu sumu plosh skladovih jogo pryamokutnikiv Plosha pryamokutnika dorivnyuye dobutku jogo dovzhini na shirinu Shpaleri kleyatsya tilki na stini otzhe ploshi verhnogo i nizhnogo pryamokutnikiv nam ne potribni Plosha odnogo pryamokutnika dorivnyuye x z drugogo u z Protilezhni pryamokutniki rivni znachit zagalna plosha chotiroh pryamokutnikiv bude dorivnyuye S 2xz 2yz 2z x y Potim z ciyeyi ploshi treba bude vidnyati zagalnu ploshu dverej i vikon Dveri i vikna ce pryamokutniki yak obchisliti yih ploshu maye buti zrozumilo Stvorennya klasiv chastin Teper pristupimo do stvorennya programi U vidpovidnist z doslidzhuvanoyi temoyu napisati yiyi treba vikoristovuyuchi ob yektno oriyentovanu paradigmu programuvannya ta she j zastosovuyuchi kompozicijnij pidhid Mozhna pomititi sho faktichno u nas ye tri tipi ob yektiv ce ob yekti vikna ob yekti dveri i ob yekti kimnati Vihodit tri klasi Vikna ta dveri ye chastinami primishennya a znachit mozhut stvoryuvatisya useredini klasu kimnati Krim togo dlya danoyi zadachi istotne znachennya mayut lishe dvi vlastivosti dovzhina i shirina Tomu klasi vikna i dveri mozhna ob yednati v odin Zrozumilo sho yaksho dlya zavdannya buli b vazhlivi inshi vlastivosti napriklad tovshina skla material to mozhlivo varto bulo b stvoriti dva klasi class Win Door def init self x y self square x y Tut pri vikliku klasu Win Door bude avtomatichno stvorenij atribut square ob yekta yakij ye posilannyam na znachennya ploshi ob yekta Stvorennya klasu kontejnera Mozhna po riznomu realizuvati klas kontejner Ye pidozra sho bagato zalezhit vid zadachi rozv yazuvanoyi programistom jogo majsternosti i smaku Klasi chastini mozhna viklikati v metodi init tim samim ob yekti chastini budut avtomatichno stvoryuvatisya pri stvorenni ob yekta kontejnera Prote v danij zadachi mi pidemo inshim shlyahom vikna i dveri budut stvoryuvatisya specialnim dlya cih cilej metodom Takozh klas povinen mistiti metod dlya obchislennya ploshi neobhidnih shpaler wallpapers V kinci mozhna dodati metod v yakomu realizovanij visnovok tih chi inshih danih class Room def init self x y z self square 2 z x y def win door self d e f g m 1 n 1 self window Win Door d e self door Win Door f g self numb w m self numb d n def wallpapers self self wallpapers self square self window square self numb w self door square self numb d def printer self print Ploshad sten komnaty ravna str self square kv m print Okleivaemaya ploshad ravna str self wallpapers kv m U metodi init stvoryuyetsya atribut square ob yekta yakij predstavlyaye soboyu ploshu stin kimnati Metod prijmaye tri argumenti dovzhinu shirinu i visotu primishennya U metodi win door stvoryuyutsya dva ob yekti window i door a takozh atributi numb w i numb d v ostannih budut mistitisya znachennya pro kilkist vikon i dverej Yaksho pri vikliku danogo metodu v programi ne bude vkazano kilkist vikon i dverej to za zamovchuvannyam budut pidstavleni znachennya rivni 1 Metod wallpapers obchislyuye plosha neobhidnih shpaler plosha kimnati plosha vikna kilkist vikon plosha dveri kilkist dverej U kodi danij ryadok rozbit na kilka ryadkiv za dopomogoyu znaka tak roblyat yaksho ryadok duzhe dovgij Takozh zvernit uvagu yak vidbuvayetsya zvernennya do vlastivostej square ob yektiv chastin vkazuyetsya ob yekt klasu Room v klasi jogo zaminyuye self dali ob yekt chastina i nareshti sam atribut vlastivist ob yekta chastini Literatura1 Lavrisheva Katerina Mihaliyivna Pidruchnik Programna inzheneriya Vidavec rik kilkist storinok Zovnishni posilannya nedostupne posilannya z 11 04 2018 Programologiya ta yiyi zastosuvannya 23 Chervnya 2015 u Wayback Machine 2013 ros Kompozicionnyj podhod v obektno orientirovannom programmirovanii Urok 7 22 Chervnya 2015 u Wayback Machine ros Redko V N Osnovaniya kompozicionnogo programmirovaniya Zhurnal Programmirovanie 1979 3 S 3 13 20 Chervnya 2015 u Wayback Machine