Iu ajn kiu havas ajnan malgrandan scion en programado, scivolante pri kial ekzistas abstraktaj bazo klasoj. Kio estas ilia celo? Kiel krei abstraktajn klaso? Kiuj estas la avantaĝoj kiuj proponas praktike? Kial ili estas necesaj en programado kaj kelkaj trajtoj de ilia efektivigo devus konsideri?
abstraktaj klasoj
Do en programado, la unuo kodo sur bazo de kiu la objektoj ne povas esti kreita. Oni notis, ke tiu klaso de posteuloj povas esti abstrakta. Tial, la kreo de objektoj bazitaj sur ili estas sufiĉe ebla. Se ni konsideras la ekzemplon de Java, ni konstrui modelon kiu oni povas priskribi la constructores en la klaso A. Sed uzi ilin, ni povas. La vojo el ĉi tiu situacio estas deklari ajna variablo referenco. Kaj vi devas esti klare difinitaj tiel ke ĝi notas al celo de klaso A. Tio ĉi estas kiel ĝi povas esti farita? Tio helpos al ni alportos. Ĝi devus konsideri ke la patro klaso ĉiam konsiderita esti pli versátil ol la posteulo. En multaj programlingvoj uzita alporti aŭtomate. Sed se ne ekzistas konfido en la ĉeesto de tia mekanismo, do vi devos eksplicite referencas la objekto.
abstraktaj metodoj
Kio estas ili? Abstrakta voko tiuj metodoj kiuj ne implementado en ĉi tiu klaso. Tiel, sekvante krampoj (kiu listigas la argumentoj uzitaj en ĝi) ne donas formo malfermo (kun kiu la lokita bloko priskribo de la metodo), kaj nur punktokomo. Tiel, en ĉi tiu kazo, ne estas informo pri kio faras. Jen la demando povas esti demandita: "Kaj kion metodo sen efektivigo?" Finfine, li estas ne uzi! Kompreneble, en la klasĉambro, kie oni priskribis, tio ne eblas. Sed se ni konsideras la situacion de la vidpunkto de posteulo, ĝi povas nomi. Kaj ĝi funkcias sur specifa priskribo havebla en ĉi tiu klaso.
Trajtoj abstraktaj metodoj
Ekzistas limigoj en uzanta ilin. Ni konsideru la ekzemplon de la Java programlingvo. Ekzistas postulo se la klaso havas almenaux unu tian metodon, ĝi devas esti abstrakta. Kaj ĉiuokaze ĝi estas taŭga por uzi tian konstruon? Ni komprenas tion per ekzemplo klaso dorlotbestoj. Por komenci kompreni, ke ne estas sono kiu estas eldonitaj. Tial, en la plej ĝenerala klaso ne estas agordita sono efektivigo de la metodo. Sed kreita korpo kiu krom pere blokas lin. Kaj en la sekvanta, al la krei hundo klaso, kato aŭ hamstro estos preskribita sola metodo por ĝi, kadre de kiuj estos malkaŝitaj al ĉiuj trajtoj.
interfaco
En programado kreis multajn ilojn kies celo - helpi homojn fari bonan kvaliton de produktoj. Kaj la temo sub konsidero devus esti donita al ĉi tiu aspekto, kaj ke ĉiu scias Kontraste abstraktan klason de la interfaco. Do, la lasta trajto estas, ke ĝi ne povas esti la proprietoj kaj metodoj estas ne difinita korpo. Ekzamenante la diferenco inter abstrakta klaso de la interfaco, sidu pli sur unu aparta. Tiel, la unua estas heredita, dum la dua - estas realigita. Novulo persono ĉi eble ŝajnas nekonsekvenca. Sed la fakto estas, ke eblas heredis nur unu klaso kaj rimarkis - tiom kiom necesas. Tion malsamas de la interfaco de la abstrakta klaso. Java estas ankoraŭ la karakterizaj kiu povas esti priskribita nur abstrakta publikajn metodojn kaj statika konstantoj. Sed al la sama interfacoj povas ankaŭ esti heredita. Estas necese atentigi, ke la telefonistoj uzitaj estas publika per publika.
Multoblaj heredaĵo de interfacoj
Tiu trajto ne estas havebla por klasoj en multaj programlingvoj (ekz Java konsiderita de ni). Ĉi tio estas pro kelkaj problemoj. Kiel tiaj ambiguecoj indiki kiuj okazas en sinsekvo. Ĉi tiu estis la kialo por la enkonduko de pluraj interfaco heredaĵo. Ĉi parte solvas la ekzistantajn problemojn, sed ne ĉiuj. Do, danke al la principoj de encapsulado kaj polimorfismo, interfacoj povas esti sukcese efektivigita en malsamaj klasoj laŭ diversaj metodoj (kvankam ili havas la saman nomon). Sed ne forgesu pri la ekzistantaj problemoj. Do, kiam laborante kun multoblaj interfacoj devos ĉiam specifi kiu ni havas en menso. Ankaŭ, la problemoj estos kaj kiam vi provas labori kun la sama nomo en du manieroj - en ĉi tiu kazo, ili ne povos utiligi. Sekve, en tiaj kazoj estas necese prizorgi la ĉeeston de tutaj vendoj.
abstraktaj datumoj
Tiu koncepto estas ŝlosilo al programo. En ĉi tiu kazo, sub la abstracción de sendependa revizio kaj kompreni la disiĝon de interfaco kaj efektivigo. Ni rigardu ekzemplon. Ni havas televido, kiu estas objekto aŭ modulo. Ĝi havas interfacon. Kiel tia, ili estas la kontroloj, tiel kiel sono kaj bildo. Ju pli perfekta interfaco estas uzata, la pli komforta la televidilon uzata. Ni povas ŝanĝi inter programoj premante ajna butono. En ĉi tiu kazo, ne necesas pensi pri la fizikaj procezoj en la televido. Prizorgi ilin specialistoj, kiu kolektas la aparato. Ni ŝatas homoj estas nur interesita pri ecoj. Revenante al la programado, ni povas diri ke ili estas en simila interfaco kaj efektivigo. Ankaŭ, se persono estas certa en sia scio, li povas "forigi" kovri nia hipoteza televido kaj por plibonigi ĝin. Kvankam tio povas konduki al loka sukceso, plej ofte, la fina rezulto estas negativa. Sekve, en la subtenataj programado malpermeso de aliro kaj kaŝi la internaj komponantoj de abstraktaj datumoj. La principo de tiu mekanismo provizas manieron malhelpi la intencaj aŭ intenca ĝustigas de la internaj komponantoj. Kaj parolante pri abstraktaj datumtipoj, la meznombro de aro de aro de operacioj kiuj povas esti plenumitaj sur ili.
objektoj
Jam vidis abstrakta klaso kaj interfacon ĝenerale kaj ĝenerale. Nun ni detale la nia scio. Unue salajron atenton objektoj. Sub ili, ĝenerale, konscia pri la media realo kiu ekzistas en spaco kaj tempo. Sed formale identigi objektoj ene de la programo estas malfacila (kun la filozofia kaj teoria vidpunkto). Sekve, ĝi estas pro liaj proprietoj. Kiel ekzemplo, la sekva: celo povas esti unike identigitaj (kun unika nomo), estas en certa stato kaj uzas iun modelon de konduto.
heredaĵo
Ekde via programado bazas en hierarkia arbo konstruaĵo rilatoj inter objektoj, la demando estas levita pri la fakto ke la subaj ecoj de la tipoj de gepatra kodo bibliotekoj estis kopiitaj. Sub heredaĵo kompreni la rilaton kiam iu oni ripetas la konduto kaj strukturo de io alia. En ordinara vivo, ĝi povas trovi ĉie. Tia estis prokrastita kaj programado relative abstraktaj elementoj. Kiel komparo, la fakto, ke ekzistas neniu tia korpo kiel birdo. Tiu estas abstrakta nomo. Kiel specifa ekzemplo konduki teo, Najtingalo aŭ pasero. Danke al la heredaĵo ni povas uzi la klaso bibliotekoj, kaj ankaŭ evoluigi ilin por aparta programo. Tiu ilo permesas al ni por krei novajn celojn, samtempe aldonante aŭ ŝanĝante la propraĵoj de jam kreita. Heredanto akiras ĉiujn metodojn kaj kampoj de lia prapatro kaj ĝi akiras propran atributoj, se necesas. Pro la fakto ke ekzistas abstraktaj elementoj kaj la principo de heredo, estas ampleksaj ŝancoj por modifo ene de la programado orientita al celoj. Krome, ĝi permesas flekseblan alproksimiĝo al solvi problemojn. Kiam vi posedos nova klaso de transdonita datumoj kaj funkcioj.
polimorfismo
Estas necese apliki la saman funkcion por solvi malsamaj specoj de problemoj. En ĉi tiu kazo provizas antaŭ la ebleco de alia agado, la enhavo de kiuj dependos de la tipo de objekto, per kiu oni faras laboron. Sub polimorfismo kompreni la ecoj de elementoj kiuj havas komunan gepatron, plenumi simila al la semantika signifo de la problemo en malsamaj manieroj. Ni desegni analogio kun bestoj. Estas ago - kuri. Ni ĉiuj scias kiel ĝi okazas. Sed malsamaj bestoj (leono, elefanto, ĉimpanzo, krokodilo, testudo) ĉi tiu ago estos efektivigita en malsamaj manieroj. En ĉi tiu kazo, ilia movado respondecas ellaboranto, kiu se necese povas kaŭzi por aparta kazo certa rutino, algoritmo kaj efektivigi ĝin sukcese. Ĉi tiu estas farita uzante aron de metodoj. Samtempe en ĉiu klaso programisto specifas kiun objekton ecoj kiuj estas propraj. Ŝanĝi ion en la idoj, vi povas atingi specifa, deziris ago en ĉi tiu kazo. Tia efiko estas nomita polimorfismo de objektoj. Ĝenerale, abstrakta klaso estas ege utila ilo por programado.