PO Opracowanie PDF

Title PO Opracowanie
Author Łukasz Xd
Course Programowanie obiektowe
Institution Politechnika Krakowska im. Tadeusza Kosciuszki
Pages 27
File Size 497.5 KB
File Type PDF
Total Downloads 82
Total Views 189

Summary

Download PO Opracowanie PDF


Description

OdpowiedzinapytaniazestronkiDeniziaka: UwagiDeniziakadoodpowiedzistudentów: http://www.cyfronet.krakow.pl/~pedenizi/uwagi.html I.Pytanianaocenę3.0

I.1.OmówićtypydanychjęzykaJAVA. JavanieposiadateżtypuUnsigned(bezznaku),czegokonsekwencjąjestto,żeprzekraczając zakresdanegotypuprzejdziemynazakresujemny. WJaviemamyrównieżtypdanychvoid.jestwtabeliwThinkinginJavastr.70 Typydanychprostych 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ćznaczeniezmiennychimetodstatycznych. Zmiennemogąbyćporozrzucanepocałymblokuidefiniowanewmiejscu,wktórymsąpotrzebne. Pozwalatonabardziejnauralnystylkodowaniaorazułatwiazrozumienietakiegokodu. Jeżelizdefiniujeszzmiennaklasyjakostatycznabedzieistnialatylkojednatakazmiennanacalaklasew innymwypadkuwszystkieobiektybedaposiadalywlasnakopietejzmiennej.Posiadaniezmiennych 1

publicznychniejestdobrympomyslem.Jednakstalepubliczneczylipolafinalneniestanowiazagrozenia metodystatycznetometodyktorenieoperujanaobiektach.Dlaprzykladu,metodapow.Mathjest metodastatyczna.Wyrazenie:Math.pow(x,y)obliczaxdopotegiy.Niepotrzebujeobiektuklasy Math,bytegodokonac.Innymislowymetodatanieposiadaparametruukrytego. Metodystatycznemoznatraktowacjakometodyktorenieposiadajaparametruthis. Metodystatycznenieoperujanaobiektach,niemozeszuzywacichabyuzyskacdostepdozmiennych skladowych.Jednakzemetodystatycznemajadostepdozmiennychstatycznychswojejklasy.Np. publicstaticintpobierzNastepnyId(){ returnnastepnyId;//zwracazmiennastatyczna } abywywolactakametodepodajemynazwejejklasy intn=Pracownik.pobierzNastepnyId(); Metodystatycznychuzywasiewdwochsytuacjach: ● Gdydanametodaniepotrzebujedostepudoobiektu,poniewazwszystkiepotrzebnejej parametrysadostarczanejawnie(przyklad:Math.pow) ● Gdymetodapotrzebujedostepujedyniedozmiennychstatycznychklasy(przyklad Pracownik.pobierzNastepnyId) Moznawywolacmetodestatycznanawetjezelinieposiadamyzadnychobiektowdanejklasy.Ztego samegopowodumetodamainjestmetodastatyczna.Metodamainnieoperujenaobiektach.Wgruncie rzeczy,gdyprogramdopierozaczynadziałać,zadneobiektyjeszczenieistnieja.Metodamaintworzy obiekty,ktorychpotrzebujeprogram. Statycznyminiemożnaoznaczyć:konstruktorów,niezagnieżdżonychklas,interfejsów,lokalnych zmiennych,metodwewnętrznych(zagnieżdżonych)klasizmiennychinstancji. Metodystatycznieniemogąbyćprzeciążanewklasiepotomnej,mogąbyćconajwyżejredefiniowane. Zasadystosowaniaelementówstatycznych: ● Metodyipolastatycznemoznawywoływaczklasy, ● Metodystatycznemogasieodwoływactylkodopólimetodstatycznych, ● Polastatycznesawspólnedlawszystkichinstancjidanejklasy, ● Polastatycznesainicjowanewczesniejnizinnepola(przypierwszymodwołaniudoklasy).

2

I.3.Cotojestpolimorfizm?Jakiemazastosowanie? Polimorfizmoznaczamożliwośćtraktowaniaobiektówróżnychpodtypówpewnegowspólnegotypuw takisamsposób. Polimorfizmwprogramowaniuobiektowymoznaczawykorzystanietegosamegokodudooperowania naobiektachprzynależnychróżnymklasom,dziedziczącymodsiebie.Zjawiskotojestzatemściśle związanezklasamiidziedziczeniem

Polimorfizmemnazywamymożliowśććodwoływniasięprzezobiektydowieluróżnychtypów.Zmienne obiektowewJaviesąpolimorficzne. dobradefinicja:) Polimorfizm: Jeden z podstawowych składników programowania obiektowego.

Dziękipolimorfizmowiuzyskujemykolejnąmetodęseparacjiinterfejsuodimplementacji,pozwalającą napolepszenieorganizacjiiczytelnościkoduorazpozwalającejnatworzenierozszerzalnych 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ć.

ZastosowaniepolimorfizmuwtworzeniuGUI. Hierarchiaklasmożeprzekładaćsięnahierarchiętypów.Możliwejestwtedypodstawieniepod zmienną(lubatrybutfunkcji)typuTobiektutypuSbędącegopodtypemTidalszeużywaniegojakby byłtypuT.Jesttomożliwedziękitemu,żepodklasaposiadakompletnyinterfejsswojejnadklasy.W podklasiemożebyćzdefiniowanametodajużistniejącawnadklasie.Konstrukcjatakaumożliwia wykonywanieoperacjinaobiektachbezinformacji,zjakimwłaściwieobiektemmamydoczynienia. RozpatrzmytypowąaplikacjęGUIwyświetlającąnaekranieróżnekomponenty(np.przycisk,pole tekstoweczylistęrozwijaną). 3

Reagująonenatesamezdarzenia:kliknięciemyszką,naciśnięcieklawisza,leczkażdyznichreaguje inaczej,stosowniedotegoczymjest.Systemobsługizdarzeńnajpierwokreśla,któryzkomponentów powinienobsłużyćzdarzenie,anastępnieprzekazujemuje.Dziękipodtypowanieopartymna dziedziczeniumożemyutworzyćwspólnąklasęKomponentzmetodąobsluzKlikniecieMyszka(),którą będąrozszerzaćwszystkierodzajekomponentów.Pobierającaktywnyobiekt,możemywywołaćtę metodębezzastanawianiasięczydanyobiektjestprzyciskiemczypolemtekstowym.

I.4.Naczympolegadziedziczenieijakiemazastosowanie? Dziedziczeniepoleganatworzeniunowychklasnapodstawiejużistniejących. Dziedziczeniejestjednązfundamentalnychcechpodejściaobiektowego.Pozwalakojarzyćklasy obiektówwhierarchieklas.WJaviehierarchiadziedziczeniadlaklasmapostaćdrzewa.Jejkorzeniem jestklasaObject.Realizacjadziedziczeniapoleganatym,żeklasadziedziczącadziedziczyposwojej nadklasiewszystkiejejatrybutyimetody(iniemaznaczenia,czyteatrybutyimetodybyły zadeklarowanebezpośredniowtejnadklasie,czyonateżodziedziczyłajeposwojejzkoleinadklasie). Dziedziczenieodzwierciedlarelacjęisa(jestczymś).Oznaczato,żekażdyobiektpodklasyjesttakże obiektemnadklasy.NaprzykładhierarchiaklaszbudowanaznadklasyOwocidwupodklasJabłkoi Gruszkajestprawidłowozbudowana,bokażdejabłkoikażdagruszkajestowocem.Definiujacklasy, najbardziejogolnemetodyumieszczaszwnadklasie,atebardziejwyspecjalizowanewpodklasie.

WjęzykuJavawprzeciwieństwiedoinnychniewystępujedziedziczeniewielokrotne.Toznaczy,że klasapotomnamożerozszerzaćtylkojednąklasębazową.ProjektanciJavyuznali,żemechanizmtaki jestprostszyiniewprowadzaniepotrzebnegochaosu.ZamiastwielokrotnegodziedziczeniawJavie dostępnyjestmechanizminterfejsów.

Podklasaniemadostępudoskładowychprywatnychswojejnadklasy. Składowazadeklarowanajakoprivateniejestdostępnapozaklasąwktórejjestzadeklarowana, wliczającjejpodklasy. Wywołaniekonstruktoranadklasyodbywasiępoprzezpoleceniesuper(listaparametrow).Wjednym konstruktorzeniemozeistnieczarazemmetodasuperjakithis.Stosowanyszczególniegdyskładowe podklasyprzesłaniająskładowenadklasyotychsamychnazwach.Kiedymetodapodklasymatą samąnazwęitypjakmetodanadklasy,wtedymówimyżeprzesłaniają.Wersjametodydlanadklasy zostajeukryta.Whierarchiiklas,najpierwwywołujemykonstruktorynadklasy,potempodklasy.Jeżeli 4

super()niejestużyte,wywołujesiędomyślnybezparametrowykonstruktorkażdejnadklasy. Klasadeklarowanajakofinalnieposiadapotomków,niewolnoponiejdziedziczyć. finalclassA{...} Taklasajestnielegalna: classBextendsA{...} Metodędeklarowanąjakofinalwnadklasieniewolnoprzesłaniaćwpodklasie. Modyfikatoryzzad8.

I.5.Cotosąklasyabstrakcyjneijakiemajązastosowanie? Zwyklepototworzymyklasybytworzyćichegzemplarze.Okazujesięjednakczęsto,żedefiniujemy klasy,którezzałożenianiebędąnigdymiałyswoichegzemplarzy.Takieklasynazywamyklasami abstrakcyjnymi.Wbrewtemu,comogłobysięwydawaćnapierwszyrzutoka,teklasypełniąbardzo ważnąrolęprzyprojektowaniuhierarchiiklas.Pozwalająbowiemnawyabstrahowaniewspólnychcech wieludefiniowanychklasijawnewskazanie,żewszystkiedziedzicząceklasymuszątecechyposiadać. Poniżejznajdujesięlistanajważniejszychcechklasabstrakcyjnych: mogązawieraćmetodyabstrakcyjne,czylitakie,którenieposiadająimplementacji(aninawet nawiasówklamrowych) ● możezawieraćstałe(zmienneoznaczonejakopublicstaticfinal) ● mogązawieraćzwykłemetody,któreniosąjakąśfunkcjonalność,aklasyrozszerzającemogą ●

jąbezproblemudziedziczyć ● klasyrozszerzająceklasęabstrakcyjnąmusząstworzyćimplementacjędlametodoznaczonych jakoabstrakcyjnewklasieabstrakcyjnej ● metodabstrakcyjnychniemożnaoznaczaćjakostatyczne(nieposiadająimplementacji) ● podobniejakwprzypadkuinterfejsówniedasiętworzyćinstancji(obiektów)klas abstrakcyjnych

I.6.Omówićsposobyinicjalizacjipólwobiektach. Kolejnośćinicjalizacji: –polastatyczne –deklaracje –konstruktor 5

–instrukcje ✔polasązerowane,zmiennelokalneniesą Konstruktorówużywamydoinicjalizacjipóldanychobiektuwmomenciejegotworzenia.Jednakże danestatyczneklasyistniejąjakojejatrybutyrównieżwtedy,gdyniemażadnegoobiektudanej klasy.AbymożnazainicjowaćzmiennestatycznewJaviezdefiniowanoinicjatorstatycznychpóldanych. Inicjalizacjastatycznanastępujepodczaspierwszegoładowaniaklasydopamięci.Klasamożemieć dowolnąliczbęinicjatorówstatycznych.Inicjatorystatycznewykonywanesąwkolejnościich wystąpieniawdefinicjiklasy. Inicjalizacjapólwobiektachpodklasjestmożliwawprzypadkuustawieniaodpowiednich modyfikatorówdostępudladanychpólwklasienadrzędnej.Tymimodyfikatoramisą:package (friendly),gdziepolemożebyćużywanewewszystkichklasachwdanympakiecie,protected,gdzie danepolebędziedostępnewklasiemacierzystej,wszystkichpodklasach(klasachdziedziczącychz klasyzawierającychpole/metodę)iwcałympakiecieorazpublic,czylidostępdlawszystkichklas programu,niezależnieodpakietu.

I.7.Omówićzasadyinicjalizacjiobiektów. Wjavienoweobiektysatworznedynamiczniewobszarzepamięcizwanymstertą(stosem)poprzez instrukcjenew.Stosująctorozwiązanieniewiemy,azdoczasuichwykonania,iluobiektow potrzebujemy,jakimabyćczasichzyciaorazdokładnytyp.Kwestietesarozstrzyganew odpowiednimmomenciepodczasdziałaniaprogramu.Jeżelipotrzebujemynowegoobiektu,tworzymy gopoprostunastercie(sterta!=stos) Javaposiadaudogodnieniezwaneodsmiecaczempamięci,automatyczniewykrywające,któryobiekt niejestjużużywany,anastępnieniszczacego. Inicjalizacjapolstatycznychjestwykonywanatylkowtedykiedyjestpotrzebna. Kolejnościnicjalizacjijestnastepujaca:najpierwzmiennestatic,jeżelijeszczeniezostały zainicjalizowaneprzezpoprzedniestworzenieobiektu,anastępnieobiektyniestatyczne. Kiedykompilatornatkniesięnanewalokujeodpowiedniailośćpamięcidlaobiektunastercie(stos). Przydzielonyobszarjestwymazywanyzautomatycznymustawieniemwszystkichtypowpodstawowych obiektunaichwartościdomyslnej(zerowprzypadkuliczbijegoodpowiednikdlatypubooleanoraz char),areferencjinanull. 6

Następnieinicjalizacjawszystkichpolokreslonajawniewmiejscuichdefnicji. Kolejnowykonywanesąciałakonstruktorów(możetopowodowaćdosyćsporodziałań). Kolejnośćincjalizacjiobiektu: ● polastatyczne ● deklaracje ● konstruktor ● instrukcje Tablice: –tworzenietablicyjednowymiarowejtypuint int[]tab=newint[10]; –tworzenietablicywielowymiarowej int[][]tab=newint[10][4]; –tworzenieiinicjalizacjazawartościtablicy int[]tab={5,3,8,2,7}; –liczbaelementówtablicy tab.length –odwołaniedoitegoelementutablicy tab[i] ✔tablicatypówprostychjestzerowana ✔tablicaobiektówjesttablicąreferencjipustych(null)

I.8.Omówićzasadyochronydostępudoelementówklasipakietów. Modyfikatory: ● public–składnikklasy(polelubmetoda)widocznydlawszystkich ● private–widocznytylkowewnątrzdanejklasy ● protected–widocznywobrębiepakietuorazwklasachpotomnychzinnychpakietów ● „puste”(friendly)–dostępnedlawszystkichwewnątrztegosamegopakietu. Opróczmodyfikatorówdostępuistniejąjeszczemodyfikatorywłaściwości: ● dlaklas: ○

7

abstractdefiniujeklasęabstrakcyjnązawierającąchociaż1metodęabstrakcyjną (niezaimplementowaną);niemożnatworzyćżadnychobiektówtejklasy;klasatakajest użytecznapodczasbudowaniahierarchiiklas(dziedziczenie):stanowiwzórdo

tworzeniaklaspochodnych; ○ finaluniemożliwiatworzenieklaspochodnych;stosujesięwceluuniemożliwieniaklasa potomna"podszyciasię"podklasębazowąorazczasamidooznaczeniaklas,nad którymipracezostałyukończone; ○ synchronizableklasazmechanizmemobsługiwątków(ang.threads); ● dlametod: ○ abstractmetodyniezaimplementowane(bezkoduizmiennych);użytecznapodczas budowaniahierarchiiklas(dziedziczenie):stanowiwzórdlametodklaspochodnych, którewymagająjejróżnychimplementacji; ○ staticmetodawspólnadlawszystkichobiektówdanejklasy;należyonadoklasy,a niedoobiektuimożebyćwywoływanabeztworzeniaobiektudanejklasy; ○ finaluniemożliwiaklasompochodnym"przesłanianie"metody; ○ synchronizedmetodablokującadostępdoobiektu,doktóregonależyi odblokowującago,gdyzakończydziałanie;jeżelidostępdoobiektuzostałwcześniej zablokowany,tometodaoczekujenajegoodblokowaniezanimzaczniesię wykonywać;mechanizmbardzoistotnywprzypadkuprogramówwielowątkowych (ang.multitheads); ○ nativeoznaczafunkcjęzwykorzystaniemnieprzenośnychcechdanejplatformy: programynapisanewJaviesąniezależneodplatformysprzętowejisystemowej;jeżeli koniecznejestskorzystaniezmechanizmówspecyficznychdladanejplatformy,to modyfikatornativepowoduje,żeprogrambędziemógłbyćuruchamianytylkonatej1 dedykowanejplatformie;

I.9.Wyjaśnićpojęcieenkapsulacji,podaćwadyizalety. Enkapsulacjainaczejzwanahermetyzacją(kapsułkowaniem)jesttojednozgłównychzałożeń programowaniaobiektowego.Poleganaukrywaniumetodiatrybutówdlaklaszewnętrznych.Dostęp donichmożliwyjesttylkozwewnątrzklasy,doktórejnależą,zklaszaprzyjaźnionychlubzklas dziedziczących. Możnawyróżnićtrzygłównepowodywprowadzeniahermetyzacjidoprogramowaniaobiektowego: 1. uodparniatworzonymodelnabłędy, 2. lepiejoddajerzeczywistość, 3. umożliwiarozbiciemodelunamniejszeelementy. Zaletystosowaniaenkapsulacji ● uodparniatworzonymodelnabłędypolegającenp.nabłędnymprzypisywaniuwartości 8



umożliwiarozbiciemodelunamniejszeelementy,któreniemusząiniepowinnyobchodzić 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.

Czestoenkapsulacjawprowadzaproblemywinterpretacjibledowkompilacji.Np.Niepamietamyze ktorespolejestprywatneaprobujemysiedoniegoodwolac.

I.10.Omówićróżnicepomiędzyprzeciążaniemaprzesłanianiem. Wjaviekonstruktorwymuszaprzciażanienazwmetod.Ponieważnazwakonstruktorajest zdeterminowanawcześniejprzeznazwęklasy,możeistniećtylkojednatakanazwa.Mimoiż przeciążaniejestkoniecznościąwprzypadkukonstruktorów,udogodnienieprzezniezapewnianema charakterogólnyimożebyćużywanewstosunkudokażdejmetody. Każdametodaprzeciażonamusipobieraćunikatowalistętypówargumentów.Różnicawkolejności argumentówjestwystarczająca,alewprowadzaproblemyzutrzymaniemkodu. Zasadyprzeciążaniametod: ● Listaargumentówmusibyćróżnaodtejzmetodyjakąchcemyprzeciążyć,możeróżnićsię ilością,typemparametrów,lubilościąitypemjednocześnie.Jeżelinatomiastnazwametody orazjejparametrybędątakiesame,jakworyginale,będziemymiećdoczynieniaz przesłonięciemmetody(jeżelisytuacjamamiejscewsubklasie),lubbłędem(jeżelisytuacjama miejscewtejsamejklasiewktórejznajdujesięmetoda,jakąprzesłaniamy), ● Typzwracanyprzezmetodęprzeciążoną,orazjejspecyfikatordostępu,mogąbyćinneniżw oryginale, ● Metodyprzeciążonemogądeklarowaćnowewyjątki,lubposzerzaćte,któresąjuż zdeklarowane,podwarunkiem,żedziedzicząonepoklasieException, Metodamożezostaćprzeciążonawramachtejsamejklasy,lubsubklasy, ● Typreferencjideterminuje,któraprzeciążonametodazostaniewywołana. ●

Ostatnipunktdomagasiękomentarza.Wprzypadkumetodprzesłanianych,otym,którazostanie wykonana,decydujetypobiektu,najakipokazujereferencja.Wprzypadkumetodprzeciążanych, odpowiedniametodawybieranajestnapodstawietypureferencji,anieobiektu. 9

Przesłanianianie(czasemzwanetezprzedefiniowanie)jesttodostarczeniewklasiepochodnej metody,ktorabylametodąwirtualnawklasiebazowejitadefinicjazastepujemetodezklasybazowej. Roznicewidacwtedy,gdymetodewywołasienarzeczobiektuwskazanegoprzezreferencjedoklasy bazowej(wtymrowniezwolanespodinnychmetodklasybazowej). Możemyprzesłonićtylkometodyzklasybazowejoznaczonejakopublic,protected,orazdefault. Klasadeklarowanajakofinalnieposiadapotomków,niewolnoponiejdziedziczyć,czyliniemożna takżeprzeciążyćaniprzesłonićjejmetod. Przesłanianieiprzeciążaniemetodłączysiębezpośredniozdziedziczeniem,tzn.operacjetewykonuje sięnametodachzklasybazowej.

I.11.ZnaczenieizastosowanieinterfejsówwjęzykuJava. Interfejstoszkielet,albobardziejszczegółowowymógjakibędąmusiałyspełniaćklasygo implementujące.Natomiastsaminterfejsjestcałkowiciepozbawionyimplementacji.Klasatapozwala samemutworcyustanowićnazwymetod,listyargumentów,typyzwracanejednakbezcialmetod.Jest toklasabazowaonajwyższejmożliwejabstrakcyjności.Pozwalanarealizacjęodmiany“dziedziczenia wielobrazowego”,czylitworzeniaklas,któredadząsięrzutowaćwgóręnawięcejniżjedentyp bazowy.;Arek wymaganiacodointerfejsówwskrócie: ● Interfejsmusibyćutworzonyprzyużyciusłowakluczowegointerface ● Interfejsymogąbyćwykorzystywanepolimorficznie,tznmożnaichużywaćjakotypu ogólniejszegoklas,któregoimplementują ● Interfejsmożerozszerzać(extends)tylkointerfejsy(nawetkilka,cowprzypadkuklasjest zabronione) ●

Metodyinter...


Similar Free PDFs