Refaktoriranje u Eclipseu

1. Pregled

Na refactoring.com čitamo da je "refaktoring disciplinirana tehnika za restrukturiranje postojećeg koda, mijenjajući njegovu unutarnju strukturu bez mijenjanja vanjskog ponašanja."

Uobičajeno je da bismo mogli preimenovati varijable ili metode ili bismo svoj kod htjeli učiniti objektno orijentiranim uvođenjem obrazaca dizajna. Suvremeni IDE imaju brojne ugrađene značajke koje nam pomažu u postizanju ovih vrsta ciljeva refaktoriranja i mnogih drugih.

U ovom uputstvu usredotočit ćemo se na refaktoriranje u Eclipseu, besplatnom popularnom Java IDE-u.

Prije nego što započnemo bilo kakvo refaktoriranje, poželjno je imati solidan niz testova kako bismo provjerili nismo li ništa slomili tijekom refaktoriranja.

2. Preimenovanje

2.1. Preimenovanje varijabli i metoda

Možemo preimenujte varijable i metode slijedeći ove jednostavne korake:

    • Odaberite element
    • Desnom tipkom miša kliknite element
    • Pritisnite Refaktor> Preimenuj opcija
  • Upišite novo ime
  • Pritisnite Unesi

Također možemo izvesti drugi i treći korak do pomoću tipke prečaca, Alt + Shift + R.

Kada se izvrši gornja radnja, Eclipse će pronaći svaku upotrebu tog elementa u toj datoteci i zamijeniti ih sve na mjestu.

Također možemo koristiti naprednu značajku za ažurirati referencu u drugim razredima lebdenjem iznad stavke kad je uključen refaktor i klikom na Opcije:

To će otvoriti skočni prozor u kojem možemo i preimenovati varijablu ili metodu i imati mogućnost ažuriranja reference u drugim klasama:

2.2. Preimenovanje paketa

Paket možemo preimenovati odabirom naziva paketa i izvođenjem istih radnji kao u prethodnom primjeru. Odmah će se pojaviti skočni prozor u kojem možemo preimenovati paket, s opcijama poput ažuriranja referenci i preimenovanja potpaketa.

Također možemo preimenovati paket u prikazu Project Explorer pritiskom na F2:

2.3. Preimenovanje klasa i sučelja

Klasu ili sučelje možemo preimenovati koristeći iste radnje ili samo pritiskom F2 iz Project Explorera. Ovo će otvoriti skočni prozor s opcijama za ažuriranje referenci, zajedno s nekoliko naprednih opcija:

3. Izdvajanje

Sada, razgovarajmo o vađenju. Izdvajanje koda znači uzimajući komad koda i premještajući ga.

Na primjer, možemo izdvojiti kôd u drugu klasu, superklasu ili sučelje. Čak bismo mogli izvući kod varijabli ili metodi u istoj klasi.

Eclipse nudi razne načine za postizanje ekstrakcija, što ćemo pokazati u sljedećim odjeljcima.

3.1. Razred ekstrakta

Pretpostavimo da imamo sljedeće Automobil klasa u našoj bazi kodova:

javni razred automobila {private String licensePlate; private String driverName; private String driverLicense; javni String getDetails () {return "Car [licencePlate =" + licencePlate + ", vozačkoime =" + imeNaziv + ", driverLicense =" + vozačka licenca + "]"; } // geteri i postavljači}

Pretpostavimo sada da želimo izdvojiti detalje o upravljačkom programu u drugu klasu. To možemo učiniti do desnim klikom bilo gdje unutar razreda i odabirom Refaktor> Ekstraktna klasa opcija:

Ovo će otvoriti skočni prozor u kojem možemo imenovati razred i odabrati koja polja želimo premjestiti, zajedno s nekoliko drugih opcija:

Također možemo pregledati kôd prije kretanja naprijed. Kad kliknemo u redu, Eclipse će stvoriti novu klasu pod nazivom Vozač, a prethodni kôd bit će prepravljen na:

javni razred automobila {private String licensePlate; privatni vozač vozača = novi upravljački program (); javni String getDetails () {return "Car [licensePlate =" + licensePlate + ", driverName =" + driver.getDriverName () + ", driverLicense =" + driver.getDriverLicense () + "]"; } // geteri i postavljači}

3.2. Izdvoji sučelje

Na sličan način možemo izvući i sučelje. Pretpostavimo da imamo sljedeće Usluga zaposlenika razred:

javna klasa EmployeeService {public void save (Employee emp) {} public void delete (Employee emp) {} public void sendEmail (ID-ovi popisa, String poruka) {}}

Sučelje možemo izdvojiti pomoću desnim klikom bilo gdje unutar razreda i odabirom Refaktor> Izdvoji sučelje opcija, ili možemo koristiti Alt + Shift + T naredba prečaca za izravno otvaranje izbornika:

Ovo će otvoriti skočni prozor u koji možemo unijeti ime sučelja i odlučiti koje članove prijaviti u sučelju:

Kao rezultat ovog refaktoriranja imat ćemo sučelje IEmpService, i naš Usluga zaposlenika promijenit će se i klasa:

javna klasa EmployeeService implementira IEmpService {@Override public void save (Employee emp) {} @Override public void delete (Employee emp) {} public void sendEmail (ID-ovi popisa, string poruka) {}}

3.3. Ekstrakt Superclass

Pretpostavimo da imamo Zaposlenik razred koji sadrži nekoliko svojstava koja se ne odnose nužno na zaposlenje te osobe:

zaposlenik u javnoj klasi {private String name; privatno int doba; privatno int iskustvoInMonths; javni String getName () {return ime; } public int getAge () {return age; } public int getExperienceInMonths () {vratiti iskustvoInMonths; }}

Možda ćemo htjeti izdvojiti svojstva koja se ne odnose na zaposlenje u a Osoba superrazred. Da bismo izdvojili predmete u superklasu, možemo desnom tipkom miša kliknite bilo gdje u razredu i odaberite Refaktor> Izdvoji superklasu ili upotrijebite Alt + Shift + T za izravno otvaranje izbornika:

Ovo će stvoriti novo Osoba razred s odabranim varijablama i metodom te Zaposlenik klasa će se prepraviti na:

zaposlenik javne klase proširuje Person {private int experienceInMonths; public int getExperienceInMonths () {vratiti iskustvoInMonths; }}

3.4. Metoda ekstrakcije

Ponekad bismo možda htjeli izdvojiti određeni dio koda unutar naše metode na drugu metodu kako bi naš kôd bio čist i jednostavan za održavanje.

Recimo, na primjer, da imamo petlju for ugrađenu u našu metodu:

test javne klase {public static void main (String [] args) {for (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}}

Za pozivanje Metoda ekstrakcije čarobnjaka, trebamo izvršiti sljedeće korake:

  • Odaberite retke koda koje želimo izdvojiti
  • Desnom tipkom miša kliknite odabrano područje
  • Pritisnite Refaktor> Metoda ekstrakcije opcija

Posljednja dva koraka mogu se postići i tipkovničkim prečacem Alt + Shift + M. Da vidimo Metoda ekstrakcije dijaloški okvir:

Ovo će refaktorirati naš kôd na:

test javne klase {public static void main (String [] args) {printArgs (args); } privatna statička void printArgs (String [] args) {for (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}}

3.5. Izdvojite lokalne varijable

Neke stavke možemo izdvojiti kao lokalne varijable kako bismo naš kod učinili čitljivijim.

Ovo je zgodno kad imamo Niz doslovno:

test javne klase {public static void main (String [] args) {System.out.println ("Broj proslijeđenih argumenata" src = "// www.baeldung.com/wp-content/uploads/2019/06/Eclipse- refactor-21.png ">

Posljednji korak može se postići i tipkovnom prečacom Alt + Shift + L. Sada možemo izdvojiti našu lokalnu varijablu:

I evo rezultata ovog refaktoriranja:

test javne klase {public static void main (String [] args) {final String prefix = "Number of Arguments passedextracting-constants"> 3.6. Ekstrakt konstanta

Ili možemo izdvojiti izraze i doslovne vrijednosti u statički konačni atributi klase.

Mogli bismo izvući 3.14 vrijednost u lokalnu varijablu, kao što smo upravo vidjeli:

javna klasa MathUtil {javni dvostruki opseg (dvostruki radijus) {return 2 * 3,14 * radijus; }}

Ali, možda bi bilo bolje izdvojiti ga kao konstantu, za što trebamo:

  • Odaberite stavku
  • Desnom tipkom miša kliknite i odaberite Refaktor> Ekstrakt konstanta

Otvorit će se dijaloški okvir u kojem konstanti možemo dati ime i postaviti vidljivost, zajedno s nekoliko drugih opcija:

Sada naš kod izgleda malo čitljiviji:

javna klasa MathUtil {privatni statički konačni dvostruki PI = 3,14; javni dvostruki opseg (dvostruki radijus) {return 2 * PI * radijus; }}

4. Umetanje

Također možemo ići drugim putem i ugrađenim kodom.

Razmotrite a Util klasa koja ima lokalnu varijablu koja se koristi samo jednom:

javna klasa Util {javna void isNumberPrime (int num) {boolean rezultat = isPrime (num); if (rezultat) {System.out.println ("Broj je prost"); } else {System.out.println ("Broj nije prost"); }} // metoda isPrime} 

Želimo ukloniti proizlaziti lokalna varijabla i inline isPrime poziv metode. Da bismo to učinili, slijedimo ove korake:

  • Odaberite stavku koju želimo ugraditi
  • Desnom tipkom miša kliknite i Odaberi Refaktor> Inline opcija

Posljednji se korak može postići i tipkovničkom prečacom Alt + Shift + I:

Poslije imamo jednu varijablu manje za praćenje:

javna klasa Util {public void isNumberPrime (int num) {if (isPrime (num)) {System.out.println ("Number is Prime"); } else {System.out.println ("Broj nije prost"); }} // metoda isPrime}

5. Pritisnite dolje i povucite prema gore

Ako imamo odnos roditelja i djeteta (kao naš prethodni Zaposlenik i Osoba primjer) između naših klasa i želimo premjestiti određene metode ili varijable među njih, možemo koristiti opcije push / pull koje pruža Eclipse.

Kao što i samo ime govori, Potisnuti opcija premješta metode i polja iz roditeljske klase u sve podređene razrede, dok Povući premješta metode i polja iz određene podređene klase u roditelj, čime je ta metoda dostupna svim podređenim razredima.

Za premještanje metoda na dječju nastavu moramo desnom tipkom miša kliknite bilo gdje u razredu i odaberite Refaktor> Pritisnite dolje opcija:

Ovo će otvoriti čarobnjaka u kojem možemo odabrati stavke koje ćemo pritisnuti prema dolje:

Slično tome, za premještanje metoda iz podređenog razreda u roditeljski razred moramo desnom tipkom miša kliknite bilo gdje u razredu i odaberite Refaktor> Povuci prema gore:

Otvorit će se sličan čarobnjak u kojem možemo odabrati stavke koje ćemo izvući:

6. Promjena potpisa metode

Da bismo promijenili potpis metode postojeće metode, možemo slijediti nekoliko jednostavnih koraka:

  • Odaberite metodu ili postavite kursor negdje unutra
  • Desnom tipkom miša kliknite i odaberite Refaktor> Potpis promjene metode

Posljednji se korak može postići i tipkovničkom prečacom Alt + Shift + C.

Ovo će otvoriti skočni prozor u kojem možete prema tome promijeniti potpis metode:

7. Kretanje

Ponekad to jednostavno želimo premjestite metode u drugu postojeću klasu kako bi naš kod bio više objektno orijentiran.

Razmotrimo scenarij u kojem imamo Film razred:

film javne klase {naslov privatnog niza; privatna dvostruka cijena; privatni tip MovieType; // ostale metode}

I Vrsta filma je jednostavan nabroj:

javni nabrajanje Vrsta filma {NOVO, REDOVNO}

Pretpostavimo također da imamo zahtjev da ako Kupac iznajmljuje film koji je NOVI, naplatit će se dva dolara više, i to naša Kupac klasa ima sljedeću logiku za izračunavanje Ukupni trošak():

kupac javne klase {naziv privatnog niza; privatna string adresa; filmovi s privatnog popisa; javna dvostruka ukupna cijena () {dvostruki rezultat = 0; za (Filmski film: filmovi) {rezultat + = filmCost (film); } vratiti rezultat; } privatni dvostruki filmCost (filmski film) {if (movie.getType () .equals (MovieType.NEW)) {return 2 + movie.getPrice (); } vratiti film.getPrice (); } // ostale metode}

Jasno je da je izračun troškova filma zasnovan na Vrsta filma bi bilo prikladnije smješteno u Film razred a ne the Kupac razred. Ovu logiku izračuna možemo lako premjestiti u Eclipse:

  • Odaberite linije koje želite premjestiti
  • Desnom tipkom miša kliknite i odaberite Refaktor> Premjesti opcija

Posljednji se korak može postići i tipkovničkom prečacom Alt + Shift + V:

Eclipse je dovoljno pametan da shvati da bi ta logika trebala biti u našem Film razred. Možemo promijeniti naziv metode ako želimo, zajedno s ostalim naprednim opcijama.

Konačni Kupac kôd klase bit će prepravljen na:

kupac javne klase {naziv privatnog niza; privatna string adresa; filmovi s privatnog popisa; javna dvostruka ukupna cijena () {dvostruki rezultat = 0; za (Filmski film: filmovi) {rezultat + = film.movieCost (); } vratiti rezultat; } // ostale metode}

Kao što vidimo, movieCost metoda premještena je u našu Film klase i koristi se u prepravljenom Kupac razred.

8. Zaključak

U ovom smo tutorijalu pogledali neke od glavnih tehnika refaktoriranja koje nudi Eclipse. Počeli smo s nekim osnovnim refaktoriranjem poput preimenovanja i izdvajanja. Kasnije smo vidjeli različite metode i polja oko različitih razreda.

Da bismo saznali više, uvijek se možemo obratiti službenoj Eclipse dokumentaciji o refaktoringu.


$config[zx-auto] not found$config[zx-overlay] not found