Title | PO Opracowanie |
---|---|
Author | Łukasz Xd |
Course | Programowanie obiektowe |
Institution | Politechnika Krakowska im. Tadeusza Kosciuszki |
Pages | 27 |
File Size | 497.5 KB |
File Type | |
Total Downloads | 82 |
Total Views | 189 |
Download PO Opracowanie PDF
OdpowiedzinapytaniazestronkiDeniziaka: UwagiDeniziakadoodpowiedzistudentów: http://www.cyfronet.krakow.pl/~pedenizi/uwagi.html I.Pytanianaocenę3.0
I.1.OmówićtypydanychjęzykaJAVA. JavanieposiadateżtypuUnsigned(bezznaku),czegokonsekwencjąjestto,żeprzekraczając zakresdanegotypuprzejdziemynazakresujemny. WJaviemamyrównieżtypdanychvoid.jestwtabeliwThinkinginJavastr.70 Typydanychprostych Typ
Rozmiar(bity)
Klasa
boolean
(true,false)
Boolean
char
16(Unicode)
Character
byte
8
Byte
short
16
Short
int
32
Integer
long
64
Long
float
32(IEEE754)
Float
double
64(IEEE754)
Double
I.2.Omówićznaczeniezmiennychimetodstatycznych. Zmiennemogąbyćporozrzucanepocałymblokuidefiniowanewmiejscu,wktórymsąpotrzebne. Pozwalatonabardziejnauralnystylkodowaniaorazułatwiazrozumienietakiegokodu. Jeżelizdefiniujeszzmiennaklasyjakostatycznabedzieistnialatylkojednatakazmiennanacalaklasew innymwypadkuwszystkieobiektybedaposiadalywlasnakopietejzmiennej.Posiadaniezmiennych 1
publicznychniejestdobrympomyslem.Jednakstalepubliczneczylipolafinalneniestanowiazagrozenia metodystatycznetometodyktorenieoperujanaobiektach.Dlaprzykladu,metodapow.Mathjest metodastatyczna.Wyrazenie:Math.pow(x,y)obliczaxdopotegiy.Niepotrzebujeobiektuklasy Math,bytegodokonac.Innymislowymetodatanieposiadaparametruukrytego. Metodystatycznemoznatraktowacjakometodyktorenieposiadajaparametruthis. Metodystatycznenieoperujanaobiektach,niemozeszuzywacichabyuzyskacdostepdozmiennych skladowych.Jednakzemetodystatycznemajadostepdozmiennychstatycznychswojejklasy.Np. publicstaticintpobierzNastepnyId(){ returnnastepnyId;//zwracazmiennastatyczna } abywywolactakametodepodajemynazwejejklasy intn=Pracownik.pobierzNastepnyId(); Metodystatycznychuzywasiewdwochsytuacjach: ● Gdydanametodaniepotrzebujedostepudoobiektu,poniewazwszystkiepotrzebnejej parametrysadostarczanejawnie(przyklad:Math.pow) ● Gdymetodapotrzebujedostepujedyniedozmiennychstatycznychklasy(przyklad Pracownik.pobierzNastepnyId) Moznawywolacmetodestatycznanawetjezelinieposiadamyzadnychobiektowdanejklasy.Ztego samegopowodumetodamainjestmetodastatyczna.Metodamainnieoperujenaobiektach.Wgruncie rzeczy,gdyprogramdopierozaczynadziałać,zadneobiektyjeszczenieistnieja.Metodamaintworzy obiekty,ktorychpotrzebujeprogram. Statycznyminiemożnaoznaczyć:konstruktorów,niezagnieżdżonychklas,interfejsów,lokalnych zmiennych,metodwewnętrznych(zagnieżdżonych)klasizmiennychinstancji. Metodystatycznieniemogąbyćprzeciążanewklasiepotomnej,mogąbyćconajwyżejredefiniowane. Zasadystosowaniaelementówstatycznych: ● Metodyipolastatycznemoznawywoływaczklasy, ● Metodystatycznemogasieodwoływactylkodopólimetodstatycznych, ● Polastatycznesawspólnedlawszystkichinstancjidanejklasy, ● Polastatycznesainicjowanewczesniejnizinnepola(przypierwszymodwołaniudoklasy).
2
I.3.Cotojestpolimorfizm?Jakiemazastosowanie? Polimorfizmoznaczamożliwośćtraktowaniaobiektówróżnychpodtypówpewnegowspólnegotypuw takisamsposób. Polimorfizmwprogramowaniuobiektowymoznaczawykorzystanietegosamegokodudooperowania naobiektachprzynależnychróżnymklasom,dziedziczącymodsiebie.Zjawiskotojestzatemściśle związanezklasamiidziedziczeniem
Polimorfizmemnazywamymożliowśććodwoływniasięprzezobiektydowieluróżnychtypów.Zmienne obiektowewJaviesąpolimorficzne. dobradefinicja:) Polimorfizm: Jeden z podstawowych składników programowania obiektowego.
Dziękipolimorfizmowiuzyskujemykolejnąmetodęseparacjiinterfejsuodimplementacji,pozwalającą napolepszenieorganizacjiiczytelnościkoduorazpozwalającejnatworzenierozszerzalnych programów. Polimorfizm, czyli wielopostaciowość, pozwala nam traktować dany obiekt nie jako reprezentanta typu specjalizowanego, ale bazowego. Jest to możliwe dzięki zastosowaniu dziedziczenia opartego o przesłanianie funkcji klasy bazowej, dzięki czemu nie zmienia się typ obiektu. Pozwala to na pisanie kodu niezależnego od konkretnego typu. Polimorfizm jest możliwe dzięki koncepcjom takim jak: Późne wiązanie (late binding) – przy wysyłaniu komunikatu do obiektu kod, który będzie wykonany nie jest zdeterminowany aż do czasu wykonania. Kompilator upewnia się, że metoda istnieje, sprawdza typy argumentów i typ zwracanej wartości, nie wie jednak, jaki kod należy wykonać. W celu przeprowadzenia późnego wiązania Java umieszcza zamiast bezwzględnego wywołania specjalny fragment kodu obliczający adres ciała metody na podstawie informacji przechowywanej w obiekcie. Każdy obiekt może zatem zachowywać się inaczej, w zależności od wyniku działania tego małego fragmentu kodu. Gdy wysyłamy komunikat do obiektu, obiekt decyduje, co z nim zrobić.
ZastosowaniepolimorfizmuwtworzeniuGUI. Hierarchiaklasmożeprzekładaćsięnahierarchiętypów.Możliwejestwtedypodstawieniepod zmienną(lubatrybutfunkcji)typuTobiektutypuSbędącegopodtypemTidalszeużywaniegojakby byłtypuT.Jesttomożliwedziękitemu,żepodklasaposiadakompletnyinterfejsswojejnadklasy.W podklasiemożebyćzdefiniowanametodajużistniejącawnadklasie.Konstrukcjatakaumożliwia wykonywanieoperacjinaobiektachbezinformacji,zjakimwłaściwieobiektemmamydoczynienia. RozpatrzmytypowąaplikacjęGUIwyświetlającąnaekranieróżnekomponenty(np.przycisk,pole tekstoweczylistęrozwijaną). 3
Reagująonenatesamezdarzenia:kliknięciemyszką,naciśnięcieklawisza,leczkażdyznichreaguje inaczej,stosowniedotegoczymjest.Systemobsługizdarzeńnajpierwokreśla,któryzkomponentów powinienobsłużyćzdarzenie,anastępnieprzekazujemuje.Dziękipodtypowanieopartymna dziedziczeniumożemyutworzyćwspólnąklasęKomponentzmetodąobsluzKlikniecieMyszka(),którą będąrozszerzaćwszystkierodzajekomponentów.Pobierającaktywnyobiekt,możemywywołaćtę metodębezzastanawianiasięczydanyobiektjestprzyciskiemczypolemtekstowym.
I.4.Naczympolegadziedziczenieijakiemazastosowanie? Dziedziczeniepoleganatworzeniunowychklasnapodstawiejużistniejących. Dziedziczeniejestjednązfundamentalnychcechpodejściaobiektowego.Pozwalakojarzyćklasy obiektówwhierarchieklas.WJaviehierarchiadziedziczeniadlaklasmapostaćdrzewa.Jejkorzeniem jestklasaObject.Realizacjadziedziczeniapoleganatym,żeklasadziedziczącadziedziczyposwojej nadklasiewszystkiejejatrybutyimetody(iniemaznaczenia,czyteatrybutyimetodybyły zadeklarowanebezpośredniowtejnadklasie,czyonateżodziedziczyłajeposwojejzkoleinadklasie). Dziedziczenieodzwierciedlarelacjęisa(jestczymś).Oznaczato,żekażdyobiektpodklasyjesttakże obiektemnadklasy.NaprzykładhierarchiaklaszbudowanaznadklasyOwocidwupodklasJabłkoi Gruszkajestprawidłowozbudowana,bokażdejabłkoikażdagruszkajestowocem.Definiujacklasy, najbardziejogolnemetodyumieszczaszwnadklasie,atebardziejwyspecjalizowanewpodklasie.
WjęzykuJavawprzeciwieństwiedoinnychniewystępujedziedziczeniewielokrotne.Toznaczy,że klasapotomnamożerozszerzaćtylkojednąklasębazową.ProjektanciJavyuznali,żemechanizmtaki jestprostszyiniewprowadzaniepotrzebnegochaosu.ZamiastwielokrotnegodziedziczeniawJavie dostępnyjestmechanizminterfejsów.
Podklasaniemadostępudoskładowychprywatnychswojejnadklasy. Składowazadeklarowanajakoprivateniejestdostępnapozaklasąwktórejjestzadeklarowana, wliczającjejpodklasy. Wywołaniekonstruktoranadklasyodbywasiępoprzezpoleceniesuper(listaparametrow).Wjednym konstruktorzeniemozeistnieczarazemmetodasuperjakithis.Stosowanyszczególniegdyskładowe podklasyprzesłaniająskładowenadklasyotychsamychnazwach.Kiedymetodapodklasymatą samąnazwęitypjakmetodanadklasy,wtedymówimyżeprzesłaniają.Wersjametodydlanadklasy zostajeukryta.Whierarchiiklas,najpierwwywołujemykonstruktorynadklasy,potempodklasy.Jeżeli 4
super()niejestużyte,wywołujesiędomyślnybezparametrowykonstruktorkażdejnadklasy. Klasadeklarowanajakofinalnieposiadapotomków,niewolnoponiejdziedziczyć. finalclassA{...} Taklasajestnielegalna: classBextendsA{...} Metodędeklarowanąjakofinalwnadklasieniewolnoprzesłaniaćwpodklasie. Modyfikatoryzzad8.
I.5.Cotosąklasyabstrakcyjneijakiemajązastosowanie? Zwyklepototworzymyklasybytworzyćichegzemplarze.Okazujesięjednakczęsto,żedefiniujemy klasy,którezzałożenianiebędąnigdymiałyswoichegzemplarzy.Takieklasynazywamyklasami abstrakcyjnymi.Wbrewtemu,comogłobysięwydawaćnapierwszyrzutoka,teklasypełniąbardzo ważnąrolęprzyprojektowaniuhierarchiiklas.Pozwalająbowiemnawyabstrahowaniewspólnychcech wieludefiniowanychklasijawnewskazanie,żewszystkiedziedzicząceklasymuszątecechyposiadać. Poniżejznajdujesięlistanajważniejszychcechklasabstrakcyjnych: mogązawieraćmetodyabstrakcyjne,czylitakie,którenieposiadająimplementacji(aninawet nawiasówklamrowych) ● możezawieraćstałe(zmienneoznaczonejakopublicstaticfinal) ● mogązawieraćzwykłemetody,któreniosąjakąśfunkcjonalność,aklasyrozszerzającemogą ●
jąbezproblemudziedziczyć ● klasyrozszerzająceklasęabstrakcyjnąmusząstworzyćimplementacjędlametodoznaczonych jakoabstrakcyjnewklasieabstrakcyjnej ● metodabstrakcyjnychniemożnaoznaczaćjakostatyczne(nieposiadająimplementacji) ● podobniejakwprzypadkuinterfejsówniedasiętworzyćinstancji(obiektów)klas abstrakcyjnych
I.6.Omówićsposobyinicjalizacjipólwobiektach. Kolejnośćinicjalizacji: –polastatyczne –deklaracje –konstruktor 5
–instrukcje ✔polasązerowane,zmiennelokalneniesą Konstruktorówużywamydoinicjalizacjipóldanychobiektuwmomenciejegotworzenia.Jednakże danestatyczneklasyistniejąjakojejatrybutyrównieżwtedy,gdyniemażadnegoobiektudanej klasy.AbymożnazainicjowaćzmiennestatycznewJaviezdefiniowanoinicjatorstatycznychpóldanych. Inicjalizacjastatycznanastępujepodczaspierwszegoładowaniaklasydopamięci.Klasamożemieć dowolnąliczbęinicjatorówstatycznych.Inicjatorystatycznewykonywanesąwkolejnościich wystąpieniawdefinicjiklasy. Inicjalizacjapólwobiektachpodklasjestmożliwawprzypadkuustawieniaodpowiednich modyfikatorówdostępudladanychpólwklasienadrzędnej.Tymimodyfikatoramisą:package (friendly),gdziepolemożebyćużywanewewszystkichklasachwdanympakiecie,protected,gdzie danepolebędziedostępnewklasiemacierzystej,wszystkichpodklasach(klasachdziedziczącychz klasyzawierającychpole/metodę)iwcałympakiecieorazpublic,czylidostępdlawszystkichklas programu,niezależnieodpakietu.
I.7.Omówićzasadyinicjalizacjiobiektów. Wjavienoweobiektysatworznedynamiczniewobszarzepamięcizwanymstertą(stosem)poprzez instrukcjenew.Stosująctorozwiązanieniewiemy,azdoczasuichwykonania,iluobiektow potrzebujemy,jakimabyćczasichzyciaorazdokładnytyp.Kwestietesarozstrzyganew odpowiednimmomenciepodczasdziałaniaprogramu.Jeżelipotrzebujemynowegoobiektu,tworzymy gopoprostunastercie(sterta!=stos) Javaposiadaudogodnieniezwaneodsmiecaczempamięci,automatyczniewykrywające,któryobiekt niejestjużużywany,anastępnieniszczacego. Inicjalizacjapolstatycznychjestwykonywanatylkowtedykiedyjestpotrzebna. Kolejnościnicjalizacjijestnastepujaca:najpierwzmiennestatic,jeżelijeszczeniezostały zainicjalizowaneprzezpoprzedniestworzenieobiektu,anastępnieobiektyniestatyczne. Kiedykompilatornatkniesięnanewalokujeodpowiedniailośćpamięcidlaobiektunastercie(stos). Przydzielonyobszarjestwymazywanyzautomatycznymustawieniemwszystkichtypowpodstawowych obiektunaichwartościdomyslnej(zerowprzypadkuliczbijegoodpowiednikdlatypubooleanoraz char),areferencjinanull. 6
Następnieinicjalizacjawszystkichpolokreslonajawniewmiejscuichdefnicji. Kolejnowykonywanesąciałakonstruktorów(możetopowodowaćdosyćsporodziałań). Kolejnośćincjalizacjiobiektu: ● polastatyczne ● deklaracje ● konstruktor ● instrukcje Tablice: –tworzenietablicyjednowymiarowejtypuint int[]tab=newint[10]; –tworzenietablicywielowymiarowej int[][]tab=newint[10][4]; –tworzenieiinicjalizacjazawartościtablicy int[]tab={5,3,8,2,7}; –liczbaelementówtablicy tab.length –odwołaniedoitegoelementutablicy tab[i] ✔tablicatypówprostychjestzerowana ✔tablicaobiektówjesttablicąreferencjipustych(null)
I.8.Omówićzasadyochronydostępudoelementówklasipakietów. Modyfikatory: ● public–składnikklasy(polelubmetoda)widocznydlawszystkich ● private–widocznytylkowewnątrzdanejklasy ● protected–widocznywobrębiepakietuorazwklasachpotomnychzinnychpakietów ● „puste”(friendly)–dostępnedlawszystkichwewnątrztegosamegopakietu. Opróczmodyfikatorówdostępuistniejąjeszczemodyfikatorywłaściwości: ● dlaklas: ○
7
abstractdefiniujeklasęabstrakcyjnązawierającąchociaż1metodęabstrakcyjną (niezaimplementowaną);niemożnatworzyćżadnychobiektówtejklasy;klasatakajest użytecznapodczasbudowaniahierarchiiklas(dziedziczenie):stanowiwzórdo
tworzeniaklaspochodnych; ○ finaluniemożliwiatworzenieklaspochodnych;stosujesięwceluuniemożliwieniaklasa potomna"podszyciasię"podklasębazowąorazczasamidooznaczeniaklas,nad którymipracezostałyukończone; ○ synchronizableklasazmechanizmemobsługiwątków(ang.threads); ● dlametod: ○ abstractmetodyniezaimplementowane(bezkoduizmiennych);użytecznapodczas budowaniahierarchiiklas(dziedziczenie):stanowiwzórdlametodklaspochodnych, którewymagająjejróżnychimplementacji; ○ staticmetodawspólnadlawszystkichobiektówdanejklasy;należyonadoklasy,a niedoobiektuimożebyćwywoływanabeztworzeniaobiektudanejklasy; ○ finaluniemożliwiaklasompochodnym"przesłanianie"metody; ○ synchronizedmetodablokującadostępdoobiektu,doktóregonależyi odblokowującago,gdyzakończydziałanie;jeżelidostępdoobiektuzostałwcześniej zablokowany,tometodaoczekujenajegoodblokowaniezanimzaczniesię wykonywać;mechanizmbardzoistotnywprzypadkuprogramówwielowątkowych (ang.multitheads); ○ nativeoznaczafunkcjęzwykorzystaniemnieprzenośnychcechdanejplatformy: programynapisanewJaviesąniezależneodplatformysprzętowejisystemowej;jeżeli koniecznejestskorzystaniezmechanizmówspecyficznychdladanejplatformy,to modyfikatornativepowoduje,żeprogrambędziemógłbyćuruchamianytylkonatej1 dedykowanejplatformie;
I.9.Wyjaśnićpojęcieenkapsulacji,podaćwadyizalety. Enkapsulacjainaczejzwanahermetyzacją(kapsułkowaniem)jesttojednozgłównychzałożeń programowaniaobiektowego.Poleganaukrywaniumetodiatrybutówdlaklaszewnętrznych.Dostęp donichmożliwyjesttylkozwewnątrzklasy,doktórejnależą,zklaszaprzyjaźnionychlubzklas dziedziczących. Możnawyróżnićtrzygłównepowodywprowadzeniahermetyzacjidoprogramowaniaobiektowego: 1. uodparniatworzonymodelnabłędy, 2. lepiejoddajerzeczywistość, 3. umożliwiarozbiciemodelunamniejszeelementy. Zaletystosowaniaenkapsulacji ● uodparniatworzonymodelnabłędypolegającenp.nabłędnymprzypisywaniuwartości 8
●
umożliwiarozbiciemodelunamniejszeelementy,któreniemusząiniepowinnyobchodzić użytkownika
Wady: Enkapsulacja nie posiada wad "fizycznych"(czy jak to tam nazwac), jednak w rękach nieudolnego programisty, który stara się ją na siłe stosować może przysporzyć problemów (czy coś w tym stylu), np. programista może ukryć ważne pole jakiejś klasy, tylko dlatego że w danym momencie z niego nie korzysta, co wcale nie oznacza że nie powinno być ono ogólno dostępne. Albo programista ukryje jakieś pole i nie stworzy metod, które umożliwiałyby korzystanie z tego pola.
Czestoenkapsulacjawprowadzaproblemywinterpretacjibledowkompilacji.Np.Niepamietamyze ktorespolejestprywatneaprobujemysiedoniegoodwolac.
I.10.Omówićróżnicepomiędzyprzeciążaniemaprzesłanianiem. Wjaviekonstruktorwymuszaprzciażanienazwmetod.Ponieważnazwakonstruktorajest zdeterminowanawcześniejprzeznazwęklasy,możeistniećtylkojednatakanazwa.Mimoiż przeciążaniejestkoniecznościąwprzypadkukonstruktorów,udogodnienieprzezniezapewnianema charakterogólnyimożebyćużywanewstosunkudokażdejmetody. Każdametodaprzeciażonamusipobieraćunikatowalistętypówargumentów.Różnicawkolejności argumentówjestwystarczająca,alewprowadzaproblemyzutrzymaniemkodu. Zasadyprzeciążaniametod: ● Listaargumentówmusibyćróżnaodtejzmetodyjakąchcemyprzeciążyć,możeróżnićsię ilością,typemparametrów,lubilościąitypemjednocześnie.Jeżelinatomiastnazwametody orazjejparametrybędątakiesame,jakworyginale,będziemymiećdoczynieniaz przesłonięciemmetody(jeżelisytuacjamamiejscewsubklasie),lubbłędem(jeżelisytuacjama miejscewtejsamejklasiewktórejznajdujesięmetoda,jakąprzesłaniamy), ● Typzwracanyprzezmetodęprzeciążoną,orazjejspecyfikatordostępu,mogąbyćinneniżw oryginale, ● Metodyprzeciążonemogądeklarowaćnowewyjątki,lubposzerzaćte,któresąjuż zdeklarowane,podwarunkiem,żedziedzicząonepoklasieException, Metodamożezostaćprzeciążonawramachtejsamejklasy,lubsubklasy, ● Typreferencjideterminuje,któraprzeciążonametodazostaniewywołana. ●
Ostatnipunktdomagasiękomentarza.Wprzypadkumetodprzesłanianych,otym,którazostanie wykonana,decydujetypobiektu,najakipokazujereferencja.Wprzypadkumetodprzeciążanych, odpowiedniametodawybieranajestnapodstawietypureferencji,anieobiektu. 9
Przesłanianianie(czasemzwanetezprzedefiniowanie)jesttodostarczeniewklasiepochodnej metody,ktorabylametodąwirtualnawklasiebazowejitadefinicjazastepujemetodezklasybazowej. Roznicewidacwtedy,gdymetodewywołasienarzeczobiektuwskazanegoprzezreferencjedoklasy bazowej(wtymrowniezwolanespodinnychmetodklasybazowej). Możemyprzesłonićtylkometodyzklasybazowejoznaczonejakopublic,protected,orazdefault. Klasadeklarowanajakofinalnieposiadapotomków,niewolnoponiejdziedziczyć,czyliniemożna takżeprzeciążyćaniprzesłonićjejmetod. Przesłanianieiprzeciążaniemetodłączysiębezpośredniozdziedziczeniem,tzn.operacjetewykonuje sięnametodachzklasybazowej.
I.11.ZnaczenieizastosowanieinterfejsówwjęzykuJava. Interfejstoszkielet,albobardziejszczegółowowymógjakibędąmusiałyspełniaćklasygo implementujące.Natomiastsaminterfejsjestcałkowiciepozbawionyimplementacji.Klasatapozwala samemutworcyustanowićnazwymetod,listyargumentów,typyzwracanejednakbezcialmetod.Jest toklasabazowaonajwyższejmożliwejabstrakcyjności.Pozwalanarealizacjęodmiany“dziedziczenia wielobrazowego”,czylitworzeniaklas,któredadząsięrzutowaćwgóręnawięcejniżjedentyp bazowy.;Arek wymaganiacodointerfejsówwskrócie: ● Interfejsmusibyćutworzonyprzyużyciusłowakluczowegointerface ● Interfejsymogąbyćwykorzystywanepolimorficznie,tznmożnaichużywaćjakotypu ogólniejszegoklas,któregoimplementują ● Interfejsmożerozszerzać(extends)tylkointerfejsy(nawetkilka,cowprzypadkuklasjest zabronione) ●
Metodyinter...