CodeGym /Java blog /Véletlen /Megrekedt? A Java tanulás legnehezebb részei és azok lekü...
John Squirrels
Szint
San Francisco

Megrekedt? A Java tanulás legnehezebb részei és azok leküzdése

Megjelent a csoportban
Mint ismeretes, kezdőknek ajánljuk a programozási nyelvek Java-val való tanulásának megkezdését, a CodeGymben pedig minden megvan ahhoz, hogy a Java tanulási folyamat a legfelkészületlenebb tanulók számára is emészthető legyen. Bár a játékelemek, a könnyed sztori és a vicces karakterek segítik ezt a folyamatot, a Java alapjainak elsajátítása a maga teljességében ritkán megy kihívások nélkül az új tanulók többsége számára. Megrekedt?  A Java tanulás legnehezebb részei és azok leküzdése - 1Ma a Java programozás alapjainak néhány legnehezebb területét fogjuk áttekinteni, és megpróbáljuk megérteni, hogy sokan miért találják ezeket nehéznek, és van-e tennivalójuk ellene.

1. Általános szerek

A Java általános elemei olyan típusok, amelyeknek van paramétere. Az általános típus létrehozásakor nem csak egy típust kell megadnia, hanem azt az adattípust is, amellyel dolgozni fog. A Java tanulók gyakran úgy emlegetik az általánosokat, mint a Java egyik legnehezebben érthető részét. „A fő problémám továbbra is a Generics kezelés. Sokkal könnyebb, ha követendő paraméterekkel rendelkező metódusai vannak, de zavaró lesz, ha sajátot kell írnia” – mondta egy névtelen Java-tanuló.

Tippek és ajánlások

Íme Ravi Reddy, tapasztalt programozó és egyetemi professzor véleménye a Java Genericsről: „A Java Generics egy olyan dolgot tesz, amit a C++ sablonok nem – a típusbiztonságot valósítják meg. A C++ sablonok megvalósítása egy egyszerű processzor előtti trükk, és nem garantálja a típusbiztonságot. A Java általános elemei olyanok, mint a C++ sablonok, de további típusbiztonsággal. És az IMHO, a típusbiztonság minden jó fejlesztői környezet alapvető jellemzője. És igen! A paraméterek és a típusok közötti mentális eltolódásaink miatt zavaróak lehetnek. De úgy gondolom, hogy az elsajátításukra szánt időt megéri az erőfeszítés. Mert azon kaptam magam, hogy sokkal jobban "gondolkozom" a Java-ban, miután megértettem az interfészek és a Generics fogalmát."

2. Többszálú

A Java többszálú kezelése két vagy több szál egyidejű végrehajtásának folyamata annak érdekében, hogy az alkalmazás maximálisan kihasználja a CPU-t. A többszálú megoldás nagyon fontos feladatokat old meg, és gyorsabbá teheti programjainkat. Sokszor gyorsabban. De ez az egyik olyan téma, ahol sok friss Java-tanuló hajlamos elakadni. Mindezt azért, mert a többszálú megoldás problémákat is okozhat ahelyett, hogy megoldaná azokat. A többszálú használat két konkrét problémát okozhat: holtpont és versenyfeltételek. A holtpont olyan helyzet, amikor több szál vár egymás által birtokolt erőforrásokra, és egyikük sem futhat tovább. A versenyfeltétel egy többszálú rendszer vagy alkalmazás tervezési hibája, ahol a rendszer vagy alkalmazás működése attól függ, hogy a kód egyes részei milyen sorrendben kerülnek végrehajtásra.

Tippek és ajánlások

Íme egy jó ajánlásS.Lott szoftvertervező és a StackExchange, egy népszerű Q&A webhely aktív felhasználója a többszálas kezelés kezeléséről: „A többszálú feldolgozás egyszerű. A többszálú alkalmazás kódolása nagyon-nagyon egyszerű. Van egy egyszerű trükk, és ez egy jól megtervezett üzenetsor használata (ne görgesd a sajátodat) az adatok szálak közötti továbbítására. A kemény rész az, hogy több szálat próbál meg valamilyen módon varázslatosan frissíteni egy megosztott objektumot. Ilyenkor válik hibássá, mert az emberek nem figyelnek a versenyfeltételekre. Sokan nem használnak üzenetsorokat, és megpróbálják frissíteni a megosztott objektumokat, és problémákat okoznak maguknak. Ami bonyolulttá válik, az egy olyan algoritmus megtervezése, amely jól működik, ha adatokat ad át több sor között. Ez nehéz.

3. Az osztályúttal kapcsolatos problémák

A Classpath hibákat a Java fejlesztők mindennapi munkája során tapasztalt egyik legpanaszosabb problémájának tekintik. „A Classpath-problémák hibakeresése időigényes lehet, és általában a lehető legrosszabb időben és helyen történnek: a kiadások előtt, és gyakran olyan környezetben, ahol a fejlesztőcsapat alig vagy egyáltalán nem fér hozzá. Ezek az IDE-szinten is megtörténhetnek, és a termelékenység csökkenésének forrásává válhatnak” – mondja Vasco Ferreira, tapasztalt Java/Javascript fejlesztő és programozással kapcsolatos oktatóanyagok szerzője.

Tippek és ajánlások

„Az osztályúti problémák nem olyan alacsony szintűek vagy megközelíthetetlenek, mint amilyennek elsőre tűnhet. Ez arról szól, hogy a zip-fájlok (jar-ek) jelen vannak-e vagy nincsenek jelen bizonyos könyvtárakban, hogyan lehet megtalálni ezeket a könyvtárakat, és hogyan lehet hibakeresni az osztályútvonalat korlátozott hozzáférésű környezetekben. Az olyan korlátozott fogalomkészlet ismeretével, mint az Osztályrakodók, az Osztályrakodó lánc és a Szülő első / Szülő utolsó módok, ezek a problémák hatékonyan kezelhetők” – magyarázza a szakértő.

4. Polimorfizmus és helyes használata

Amikor az OOP alapelveiről van szó, sokan azt mondják, hogy nehéz dolguk volt megérteni a polimorfizmust. A polimorfizmus egy program azon képessége, hogy azonos interfésszel rendelkező objektumokat ugyanúgy kezeljen, az objektum konkrét típusára vonatkozó információ nélkül. Annak ellenére, hogy a polimorfizmus meglehetősen alapvető téma, meglehetősen kiterjedt, és jó részét képezi a Java alapjainak. Sok diák számára a polimorfizmus jelenti az első nehézséget a Java tanulás során. Mindez azért, mert a polimorfizmusnak különböző formáit használják különböző összefüggésekben, ami zavaró lehet.

Tippek és ajánlások

Nincs más módja a polimorfizmus kezelésére, mint annak megtanulása. Így magyarázza Torben Mogensen, aki programozást tanít a Koppenhágai Egyetemenez a fogalom: „Egyszerű túlterhelés: + jelenthet egész számok összeadását, lebegőpontos összeadását és (egyes nyelveken) karakterlánc-összefűzését. Altípus polimorfizmus: Ha B az A altípusa (örököli) A B típusú bármely érték használható olyan környezetben, amely A típusú értéket vár. Paraméteres polimorfizmus: A típus paraméterezhető típusparaméterekkel úgy, hogy a különböző kontextusok különböző típusú argumentumokat szolgáltathatnak, így a paraméterezett típust különböző konkrét típusokhoz kell példányosítani. Ezt „sablonnak” vagy „általánosnak” is nevezik, és az OO nyelvekben jellemzően szögletes zárójelekkel (például T<A>) van megadva. Interfész polimorfizmus. Ez alapvetően egy olyan mechanizmus, ahol az altípus-polimorfizmust olyan altípusokra korlátozzuk, amelyek egy bizonyos interfészt valósítanak meg, vagy a parametrikus polimorfizmust olyan típusparaméterekre, amelyek egy bizonyos interfészt valósítanak meg.

5. Reflexió

A tükrözés egy olyan mechanizmus, amely a program futása közben feltárja az adatokat. A Reflection lehetővé teszi a mezőkkel, metódusokkal és osztálykonstruktorokkal kapcsolatos információk felfedezését. Lehetővé teszi továbbá, hogy olyan típusokkal dolgozzon, amelyek nem voltak jelen a fordítási időben, de a futási idő alatt elérhetővé váltak. A tükrözés és a hibainformációk kiadásának logikailag konzisztens modellje lehetővé teszi a helyes dinamikus kód létrehozását. De sok ember számára nem olyan könnyű kitalálni, hogyan kell használni a Reflectiont.

Tippek és ajánlások

„Reflexió és Java esetén a reflexió lehetővé teszi a statikusan gépelhető Java dinamikus gépelését. A dinamikus gépelés önmagában nem rossz. Igen, lehetővé teszi a programozó számára, hogy megsértsen bizonyos OOP-elveket, ugyanakkor számos hatékony szolgáltatást tesz lehetővé, mint például a futásidejű proxy és a függőségi injekció. Igen, a Java segítségével reflexió segítségével lábon lőheti magát. Azonban nagyon határozottan a lábára kell irányítania a fegyvert, le kell vennie a biztonságot, és meg kell húznia a ravaszt” – magyarázza Jayesh Lalwani, tapasztalt Java programozó és alkalmazástervező.

6. Bemeneti/kimeneti adatfolyamok

Az adatfolyamok segítségével bármilyen adatforrással dolgozhat: az internettel, a számítógép fájlrendszerével vagy valami mással. A streamek egy univerzális eszköz. Lehetővé teszik a programok számára, hogy bárhonnan adatokat fogadjanak (bemeneti adatfolyamok), és bárhová elküldjék (kimeneti adatfolyamok). Feladatuk ugyanaz: az egyik helyről adatokat venni és elküldeni egy másik helyre. Kétféle adatfolyam létezik: bemeneti folyamok (adatok fogadására szolgálnak) és kimeneti folyamok (adatok küldésére). Sok ember számára megnehezíti az adatfolyamok használatának megértését az a tény, hogy a Java több I/O adatfolyam osztályt tartalmaz.

Tippek és ajánlások

„A Java-nak olyan sok I/O adatfolyam-osztálya van, főleg két tényező miatt. Az első az örökség. Egyes osztályok történelmi okok miatt még mindig ott vannak, és nincsenek elavulva, mivel nem minősülnek károsnak. Másodszor a rugalmasság. A különböző alkalmazások eltérő követelményeket támasztanak, így több lehetőség közül választhat az Ön igényeitől függően. A hasznos absztrakciók egyértelművé teszik az olvasást, és néhány sornyi kóddal sokat tehetsz” – mondja Jonas Mellin, a svéd Java-szakértő. A Java mely aspektusait találta a legnehezebben megérthetőnek, vagy elakadt egy ideig? Ossza meg tapasztalatait a megjegyzésekben.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION