КампутарыПраграмаванне

ООП - гэта што такое? Асноўныя прынцыпы аб'ектна-арыентаванага праграмавання

Чаму аб'ектна-арыентаваным праграмаванні аддаецца перавагу ў большасці праектаў? ООП прапануе эфектыўны спосаб барацьбы з іх складанасцю. Замест таго каб разглядаць праграму як паслядоўнасць выкананых інструкцый, яно прадстаўляе яе як групу аб'ектаў з пэўнымі ўласцівасцямі і вырабляе з імі пэўныя дзеянні. Гэта прыводзіць да стварэння больш ясных, больш надзейных і легкосопровождаемых прыкладанняў.

Асноўныя прынцыпы аб'ектна-арыентаванага праграмавання (ААП) сфармаваліся таму, што ў існуючых раней падыходах былі выяўленыя абмежаванні. Сярод іх - неабмежаваны доступ да дадзеных і вялікая колькасць сувязяў, якія накладваюць абмежаванні на ўнясенне зменаў. Іх ўсведамленне і прычыны важныя для таго, каб зразумець, што такое ААП ў праграмаванні і якія яго перавагі.

працэдурныя мовы

C, Pascal, FORTRAN і падобныя мовы з'яўляюцца працэдурнымі. Гэта значыць кожны іх аператар загадвае кампутара нешта зрабіць: атрымаць дадзеныя, скласці колькасці, падзяліць на шэсць, адлюстраваць вынік. Дадатак на працэдурным мове ўяўляе сабой спіс інструкцый. Калі ён невялікі, ніякага іншага арганізацыйнага прынцыпу (часта званага парадыгмай) не патрабуецца. Праграміст стварае спіс інструкцый, і кампутар выконвае іх.

Падзел на функцыі

Калі прыкладання становяцца больш, спіс атрымліваецца грувасткім. Нешматлікія могуць зразумець больш за некалькі сотняў інструкцый, пакуль яны не будуць згрупаваныя. Па гэтай прычыне функцыя стала спосабам зрабіць прыкладання больш зразумелымі для сваіх стваральнікаў. У некаторых мовах тая ж канцэпцыя можа насіць назву падпраграмы або працэдуры.

Дадатак падзелена на функцыі, кожная з якіх мае выразна пэўную мэту і інтэрфейс.

Ідэя падзелу на працэдуры можа быць пашырана іх групавання ў большы аб'ект, званы модулем, але прынцып аналагічны: групаванне кампанентаў, якія выконваюць спісы інструкцый.

Падзел на функцыі і модулі - адзін з краевугольных камянёў структурнага праграмавання, якое на працягу некалькіх дзесяцігоддзяў да з'яўлення ААП з'яўлялася самадастатковае парадыгмай.

Праблемы структурнага праграмавання

Паколькі прыкладання станавіліся ўсё больш буйнымі, структурнае праграмаванне пачатак адчуваць цяжкасці. Праекты станавіліся занадта складанымі. Графікі зрушваліся. Задзейнічана вялікая колькасць праграмістаў. Складанасць расла. Выдаткі ўзляталі, графік зрушваўся далей, і надыходзіў крах.

Аналіз прычын гэтых няўдач паказаў недахопы працэдурнай парадыгмы. Незалежна ад таго, наколькі добра рэалізаваны структураваны падыход да праграмавання, буйныя прыкладання становяцца празмерна складанымі.

Якія прычыны гэтых праблем, звязаных з працэдурнымі мовамі? Па-першае, функцыі маюць неабмежаваны доступ да глабальных дадзеных. Па-другое, не звязаныя паміж сабой працэдуры і значэння дрэнна мадэлююць рэальны свет.

Калі разглядаць гэтыя праблемы ў кантэксце праграмы ўліку запасаў, то адным з найважнейшых глабальных элементаў даных з'яўляецца сукупнасць уліковых адзінак. Розныя функцыі могуць звяртацца да іх для ўводу новага значэння, яго адлюстравання, змены і т. Д.

неабмежаваны доступ

У праграме, напісанай, напрыклад, на C, ёсць два віды дадзеных. Лакальныя схаваныя ўнутры функцыі і іншымі працэдурамі не выкарыстоўваюцца.

Калі дзве і больш функцый павінны атрымаць доступ да адных і тых жа дадзеных, то апошнія павінны быць глабальнымі. Такімі, напрыклад, з'яўляюцца звесткі аб якія ўлічваюцца прадметах. Глабальныя дадзеныя могуць быць даступныя любой працэдуры.

У вялікай праграме ёсць мноства функцый і шмат глабальных элементаў. Праблема працэдурнай парадыгмы складаецца ў тым, што гэта прыводзіць да яшчэ большай колькасці патэнцыйных сувязяў паміж імі.

Такая вялікая колькасць злучэнняў выклікае некалькі цяжкасцяў. Па-першае, гэта ўскладняе разуменне структуры праграмы. Па-другое, абцяжарвае ўнясенне зменаў. Змяненне ў глабальным элеменце дадзеных можа запатрабаваць карэктавання ўсіх функцый, якія маюць да яго доступ.

Напрыклад, у праграме ўліку хтосьці вырашыць, што код ўлічваем прадмета павінен складацца не з 5 лічбаў, а з 12. Гэта запатрабуе змяніць тып дадзеных з short на long. Цяпер звязаныя з кодам функцыі павінны быць зменены для працы з новым фарматам.

Калі элементы змяняюцца ў вялікай дадатку, цяжка сказаць, якія працэдуры маюць да іх доступ. Але нават калі гэта высветліць, іх змена можа прывесці да няправільнай працы з іншымі глабальнымі дадзенымі. Усё звязана з усім астатнім, таму змяненне ў адным месцы адгукнецца ў іншым.

Мадэляванне рэальнага свету

Другі і больш важнай праблемай працэдурнай парадыгмы з'яўляецца тое, што яе размяшчэнне асобных дадзеных і функцый дрэнна мадэлюе рэчы ў рэальным свеце. Тут мы маем справу з такімі аб'ектамі, як людзі і аўтамабілі. Яны не падобныя ні на дадзеныя, ні на функцыі. Складаныя рэальныя аб'екты валодаюць атрыбутамі і паводзінамі.

атрыбуты

Прыкладамі атрыбутаў (часам званых характарыстыкамі) для людзей з'яўляюцца колер вачэй і назва пасады, для аўтамабіляў - магутнасць і колькасць дзвярэй. Як аказалася, атрыбуты ў рэальным свеце эквівалентныя дадзеным у праграме. Яны маюць канкрэтныя значэння, такія як сіні (колер вачэй) ці чатыры (колькасць дзвярэй).

паводзіны

Паводзіны - гэта тое, што аб'екты рэальнага свету вырабляюць у адказ на нейкае ўздзеянне. Калі папрасіць начальства аб павышэнні зарплаты, адказ будзе "так" ці "не". Калі націснуць на тормаз, то аўтамабіль спыніцца. Вымаўленне і прыпынак з'яўляюцца прыкладамі паводзін. Паводзіны падобна працэдуры: яго выклікаюць, каб зрабіць што-то, і яно робіць гэта. Такім чынам, дадзеныя і функцыі самі па сабе не мадэлююць аб'екты рэальнага свету эфектыўна.

Рашэнне праблемы

Аб'ект у ААП ўяўляецца як сукупнасць дадзеных і функцый. Толькі працэдуры, якія называюцца функцыямі-сябрамі ў C ++, дазваляюць атрымаць яго значэння. Дадзеныя схаваныя і абаронены ад змены. Значэння і функцыі інкапсуляванага ў адно цэлае. Інкапсуляцыя і упрятывание - асноўныя тэрміны ў апісанні ГА-моў.

Калі патрабуецца змяніць дадзеныя, дакладна вядома, якія функцыі ўзаемадзейнічаюць з імі. Ніякія іншыя працэдуры не могуць атрымаць да іх доступ. Гэта спрашчае напісанне, адладку і падтрыманне праграмы.

Дадатак, як правіла, складаецца з некалькіх аб'ектаў, якія ўзаемадзейнічаюць адзін з адным, выклікаючы функцыі-члены.

Сёння найбольш шырока выкарыстоўваецца мова ААП (аб'ектна-арыентаванае праграмаванне) - C ++ (плюс-плюс). У Java адсутнічаюць некаторыя функцыі, такія як паказальнікі, шаблоны і множнае ўспадкоўванне, што робіць яго менш магутным і універсальным, чым C ++. C # яшчэ не дасягнуў папулярнасці C ++.

Варта адзначыць, што так званыя функцыі-члены ў C ++ называюцца метадамі ў некаторых іншых ГА-мовах, такіх як Smalltalk. Элементы дадзеных называюцца атрыбутамі. Выклік метаду аб'екта з'яўляецца пасылкай яму паведамленні.

аналогія

Можна ўявіць аб'екты аддзеламі кампаніі. У большасці арганізацый супрацоўнікі не працуюць адзін дзень з кадрамі, на наступны налічаючы зарплату, а затым тыдзень займаючыся рознічнага гандлем. У кожнага аддзела ёсць свой персанал з выразна ускладзенымі на яго абавязкамі. Ёсць і ўласныя дадзеныя: паказчыкі заработнай платы, продажаў, ўлік супрацоўнікаў і т. Д. Людзі ў аддзелах працуюць са сваёй інфармацыяй. Падзел кампаніі, такім чынам, палягчае кантроль за яе дзейнасцю і падтрымлівае цэласнасць дадзеных. Бухгалтэрыя адказвае за аплатныя ведамасці. Калі неабходна ведаць агульную суму заработнай платы, якая выплачваецца ў паўднёвым філіяле ў ліпені, ня трэба корпацца ў архіве. Дастаткова накіраваць запіску адказнай асобе, пачакаць, пакуль гэты чалавек атрымае доступ да дадзеных і адправіць адказ з патрабаванай інфармацыяй. Гэта гарантуе адпаведнасць з рэгламентам і адсутнасць старонняга ўмяшання. Такім жа чынам аб'ект у ААП забяспечвае арганізацыю прыкладання.

Варта памятаць, што арыентацыя на аб'екты не тычыцца падрабязнасцяў працы праграмы. Большасць інструкцый C ++ адпавядае аператарам працэдурных моў, такіх як С. Сапраўды, функцыі-члены ў C ++ вельмі падобныя на функцыі ў С. Толькі больш шырокі кантэкст дасць магчымасць устанавіць, ці з'яўляецца інструкцыя працэдурнай або аб'ектна-арыентаванай.

Аб'ект у ААП: вызначэнне

Пры разглядзе задачы праграмавання на ГА-мове замест пытанняў аб яе падзеле на асобныя функцыі ўзнікае праблема падзелу на аб'екты. ООП-мысленне нашмат палягчае распрацоўку прыкладанняў. Гэта адбываецца ў выніку падабенства праграмных і рэальных аб'ектаў.

Якія рэчы становяцца аб'ектамі ў ООП? Ніжэй прадстаўлены тыповыя катэгорыі.

Фізічны аб'ект у ААП - гэта:

  • транспарт у мадэлях руху патоку;
  • электрычныя элементы ў праграмах схематэхнікі;
  • краіны ў мадэлі эканомікі;
  • самалёт у сістэме кіравання паветраным рухам.

Элементы асяроддзя кампутара карыстальніка:

  • меню;
  • вокны;
  • графіка (лінія, прастакутнік, круг);
  • клавіятура, мыш, прынтэр, дыскавыя назапашвальнікі.

людзі:

  • работнікі;
  • студэнты;
  • кліенты;
  • прадаўцы.

дадзеныя:

  • кніга ўліку;
  • асабістая справа;
  • слоўнік;
  • табліца шырот і даўгот населеных пунктаў.

Сувязь аб'ектаў рэальнага свету і ООП стала вынікам спалучэння функцый і дадзеных: яны зрабілі пераварот у праграмаванні. Такога блізкага адпаведнасці ў працэдурных мовах няма.

клас

Аб'екты ў ООП - гэта члены класаў. Што гэта значыць? Мовы праграмавання маюць убудаваныя тыпы дадзеных. Тып int, т. Е. Цэлы лік, наканаваны ў C ++. Можна аб'яўляць колькі заўгодна зменных int.

Аналагічна вызначаецца мноства аб'ектаў аднаго класа. Ён вызначае функцыі і дадзеныя, якiя ўключаюцца ў яго аб'екты, не ствараючы іх, гэтак жа як int не стварае зменныя.

Клас у ААП - гэта апісанне шэрагу падобных аб'ектаў. Прынц, Стынг і Мадона з'яўляюцца спевакамі. Няма ні аднаго чалавека з такім імем, але людзі могуць так называцца, калі яны валодаюць адпаведнымі характарыстыкамі. Аб'ект ООП - гэта асобнік класа.

ўспадкоўванне

У жыцці класы падзеленыя на падкласы. Напрыклад, жывёлы падзяляюцца на земнаводных, млекакормячых, птушак, насякомых і т. Д.

Прынцып такога роду дзялення складаецца ў тым, што кожны падклас мае агульныя характарыстыкі з класам, ад якога адбываецца. Усе аўтамабілі маюць колы і рухавік. Гэта вызначальныя характарыстыкі транспартных сродкаў. У дадатак да агульных характарыстыках кожны падклас валодае сваімі асаблівасцямі. У аўтобусаў шмат пасадачных месцаў, а грузавікі маюць прастору для перавозкі цяжкіх грузаў.

Аналагічна базавы клас можа стаць бацькам некалькіх вытворных падкласаў, якія могуць быць вызначаны так, што яны будуць падзяляць яго характарыстыкі з даданнем уласных. Ўспадкоўванне падобна функцыі, якая спрашчае працэдурную праграму. Калі некалькі частак кода робяць амаль тое ж, можна атрымаць агульныя элементы і змясціць іх у адну працэдуру. Тры ўчасткі праграмы могуць выклікаць функцыю, каб выканаць агульныя дзеянні, але яны могуць вырабляць і свае ўласныя аперацыі. Падобна гэтаму базавы клас змяшчае дадзеныя, агульныя для групы вытворных. Падобна функцый ўспадкоўванне скарачае ГА-праграму і растлумачвае ўзаемасувязь яе элементаў.

Паўторнае выкарыстанне

Пасля таго як клас створаны і адладжаны, ён можа быць перададзены іншым праграмістам для паўторнага выкарыстання ва ўласных прыкладаннях. Гэта падобна на бібліятэку функцый, якая можа ўваходзіць у розныя прыкладання.

У ООП ўспадкоўванне з'яўляецца пашырэннем ідэі шматразовага выкарыстання. З існуючага класа, не змяняючы яго, можна ўтварыць новы з даданнем іншых функцый. Лёгкасць паўторнага выкарыстання існуючага ПА - важнае перавага ААП. Лічыцца, што гэта забяспечвае рост даходнасці ад першапачатковых інвестыцый.

Стварэнне новых тыпаў дадзеных

Аб'екты зручныя для стварэння новых тыпаў дадзеных. Выкажам здагадку, у праграме выкарыстоўваюцца двухмерныя значэння (напрыклад, каардынаты або шырыня і даўжыня), і ёсць жаданне выказаць дзеянні з імі арыфметычнымі аперацыямі:

position1 = position + origin,

дзе position1, position і origin - пары незалежных лікавых велічынь. Стварэнне класа, які ўключае ў сябе гэтыя два значэнні, і аб'ява зменных яго аб'ектамі стварае новы тып дадзеных.

Палімарфізм, перагрузка

Аператары = (роўна) і + (плюс), якія выкарыстоўваюцца ў пазіцыйнай арыфметыцы вышэй, не дзейнічаюць так жа, як з убудаванымі тыпамі, такімі як int. Аб'екты position і інш. Ня перадвызначаныя, а зададзены праграмным шляхам. Якім чынам гэтыя аператары ведаюць, як з імі абыходзіцца? Адказ заключаецца ў тым, што для іх можна задаць новыя мадэлі паводзін. Гэтыя аперацыі будуць функцыямі-членамі класа Position.

Выкарыстанне аператараў або працэдур у залежнасці ад таго, з чым яны працуюць, называецца палімарфізмам. Калі існуючы аператар, такі як + або =, атрымлівае магчымасць працаваць з новым тыпам дадзеных, кажуць, што ён перагружаны. Перагрузка ў ООП - гэта выгляд палімарфізму. Яна з'яўляецца яго важнай рысай.

Кніга пра ООП «Аб'ектна-арыентаванае праграмаванне для чайнікаў» дазволіць усім жадаючым азнаёміцца з гэтай тэмай падрабязней.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.unansea.com. Theme powered by WordPress.