JavaRush /Java Blog /Random-TK /Java-da gaýtadan işleýiş nähili işleýär

Java-da gaýtadan işleýiş nähili işleýär

Toparda çap edildi
Programma öwrenmegi öwreneniňizde kod ýazmak üçin köp wagt sarp edilýär. Başlangyç döredijileriň köpüsi munuň geljekdäki işlerine ynanýarlar. Bu bölekleýin dogry, ýöne programmistiň wezipeleri kody saklamagy we gaýtadan işlemegi hem öz içine alýar. Bu gün gaýtadan işlemek barada gürleşeris. Java-da gaýtadan işlemegiň nähili işleýändigi - 1

JavaRush kursynda gaýtadan işlemek

JavaRush kursy iki gezek gaýtadan işlemek mowzugyny öz içine alýar: Uly işiň netijesinde, hakyky refaktory bilen iş ýüzünde tanyşmaga mümkinçilik bar we IDEA-da gaýtadan işlemek boýunça leksiýa durmuşy aňsatlaşdyrýan awtomatiki gurallara düşünmäge kömek eder.

Täzeden işlemek näme?

Bu, işleýşini üýtgetmän koduň gurluşynyň üýtgemegi. Mysal üçin, 2 san bilen deňeşdirýän we birinjisi has uly bolsa, hakykaty yzyna gaýtarýan usul bar :
public boolean max(int a, int b) {
    if(a > b) {
        return true;
    } else if(a == b) {
        return false;
    } else {
        return false;
    }
}
Netijede gaty kyn kod boldy. Hatda täze başlanlaram şuňa meňzeş bir zady seýrek ýazýarlar, ýöne şeýle töwekgelçilik bar. if-elseGörnüşi ýaly, 6 setir gysga usul ýazyp bilseňiz, bu ýerde näme üçin blok bar ?
public boolean max(int a, int b) {
     return a>b;
}
Indi bu usul ýokardaky mysal ýaly bir zat etse-de, ýönekeý we owadan görünýär. Täzeden işlemegiň usuly şeýle: koduň gurluşyna, mazmunyna täsir etmezden üýtgedýär. Has jikme-jik seredip geçjek köp refaktirleme usullary we usullary bar.

Näme üçin gaýtadan işlemek zerur?

Birnäçe sebäp bar. Mysal üçin, koduň ýönekeýligini we takyklygyny gözlemek. Bu teoriýany goldaýanlar, düşünmek üçin onlarça setir düşündiriş talap etse-de, kod mümkin boldugyça gysga bolmaly diýip hasaplaýarlar. Beýleki işläp düzüjiler, iň az sanly teswir bilen düşnükli bolar ýaly, kod täzeden işlenmeli diýip hasaplaýarlar. Her topar öz pozisiýasyny saýlaýar, ýöne gaýtadan işlemegiň peselme däldigini ýadymyzdan çykarmaly däldiris . Esasy maksady koduň gurluşyny gowulandyrmak. Bu global maksada birnäçe maksat girizilip bilner:
  1. Täzeden işlemek başga bir dörediji tarapyndan ýazylan koda düşünmegi gowulandyrýar;
  2. Rorsalňyşlyklary tapmaga we düzetmäge kömek edýär;
  3. Programma üpjünçiligini ösdürmegiň tizligini ýokarlandyrmaga mümkinçilik berýär;
  4. Umuman programma üpjünçiliginiň düzümini gowulandyrýar.
Uzak wagtlap gaýtadan işlemek amala aşyrylmasa, iş gutarýança ösüş kynçylyklary ýüze çykyp biler.

"Kod ysy"

Kod gaýtadan işlemegi talap edenlerinde, "ys" diýýärler. Elbetde, sözme-söz däl, ýöne beýle kod hakykatdanam gaty gowy görünmeýär. Aşakda başlangyç etap üçin esasy gaýtadan işleýiş usullaryna serederis.

Gereksiz uly elementler

Uly göwrümleri sebäpli takyk işlemek mümkin bolmadyk kyn synplar we usullar bar.

Uly synp

Şeýle synpda köp sanly setir setirleri we dürli usullar bar. Adatça, dörediji üçin täze bir synp döretmek däl-de, bar bolan synpa aýratynlyk goşmak has aňsat, şonuň üçinem ösýär. Düzgün bolşy ýaly, bu synpyň işleýşi aşa köp. Bu ýagdaýda işlemegiň bir bölegini aýratyn synpa bölmek kömek edýär. Bu hakda gaýtadan işleýiş usullary bölüminde has jikme-jik gürleşeris.

Uly usul

Bu “ys” dörediji bir usula täze funksiýa goşanda ýüze çykýar. "Bu ýerde ýazyp bilýän bolsam, näme üçin parametrleri barlamagy aýratyn usulda goýmaly?", "Näme üçin massiwde iň ýokary elementi tapmagyň usulyny aýyrmaly, geliň şu ýerde goýalyň. Şeýlelik bilen kod has düşnükli ”we beýleki ýalňyş düşünjeler. Uly usuly gaýtadan işlemegiň iki düzgüni bar:
  1. Usul ýazanyňyzda koda teswir goşmak isleseňiz, bu funksiýany aýratyn usula bölmeli;
  2. Bir usul 10-15 setirden köp kod talap edýän bolsa, ýerine ýetirýän meselelerini we kiçi ýumuşlaryny kesgitlemeli we subtasklary aýratyn usula bölmäge synanyşmaly.
Uly usuly ýok etmegiň birnäçe usuly:
  • Usulyň işleýşiniň bir bölegini aýratyn usula bölüň;
  • Localerli üýtgeýjiler işlemegiň bir bölegini çykarmaga mümkinçilik bermese, ähli obýekti başga usula geçirip bilersiňiz.

Köp sanly maglumat görnüşlerini ulanmak

Adatça, bu mesele synpda maglumatlary saklamak üçin meýdanlaryň sany wagtyň geçmegi bilen köpelende ýüze çykýar. Mysal üçin, maglumatlary (walýuta, sene, telefon belgileri we ş.m.) saklamak üçin kiçi obýektleriň ýerine başlangyç görnüşleri ulansaňyz ýa-da islendik maglumatlary kodlamak üçin yzygiderlilik. Bu ýagdaýda meýdanlary logiki taýdan toparlamak we aýratyn klasa ýerleşdirmek (synp saýlamak) gowy tejribe bolar. Şeýle hem bu maglumatlary synpda gaýtadan işlemegiň usullaryny goşup bilersiňiz.

Saýlawlaryň uzyn sanawy

Esasanam uly usul bilen utgaşyp, adaty bir ýalňyşlyk. Adatça usulyň işleýşi aşa köp bolsa ýa-da usul birnäçe algoritmleri birleşdirse ýüze çykýar. Parametrleriň uzyn sanawlaryna düşünmek gaty kyn we beýle usullary ulanmak amatsyz. Şonuň üçin ähli obýekti geçirmek has gowudyr. Obýektiň ýeterlik maglumaty ýok bolsa, logiki taýdan baglanyşykly maglumatlary gaýtadan işlemek üçin has umumy obýekti ulanmaga ýa-da usulyň işleýşini bölmäge mynasypdyr.

Maglumat toparlary

Logiki taýdan baglanyşykly maglumatlar toparlary köplenç kodda peýda bolýar. Mysal üçin, maglumat bazasyna birikdiriş parametrleri (URL, ulanyjy ady, parol, shema ady we ş.m.). Elementleriň sanawyndan ýekeje meýdan hem aýrylyp bilinmese, sanaw aýratyn synpda (synp saýlamasy) ýerleşdirilmeli maglumatlar toparydyr.

OOP düşünjesini bozýan çözgütler

Bu "ys" görnüşi, dörediji OOP dizaýnyny bozanda ýüze çykýar. Bu paradigmanyň mümkinçiliklerine doly düşünmese, olary doly ýa-da nädogry ulansa bolýar.

Mirasdan ýüz öwürmek

Bir kiçi klas ene synpyň funksiýalarynyň minimal bölegini ulanýan bolsa, nädogry iýerarhiýa ýaly ys gelýär. Adatça, bu ýagdaýda gereksiz usullar ýönekeý däl ýa-da kadadan çykmalar ýok. Bir synp başga birinden miras galan bolsa, bu onuň işleýşini doly ulanmagy aňladýar. Dogry iýerarhiýanyň mysaly: Java-da gaýtadan işlemegiň nähili işleýändigi - 2 Nädogry iýerarhiýanyň mysaly: Java-da gaýtadan işlemegiň nähili işleýändigi - 3

wyklýuçatel

Operatorda näme bolup biler switch? Dizaýny gaty çylşyrymly bolsa erbet. Mundan başga-da, köp sanly höwürtge bloklary hem bar if.

Dürli interfeýsli alternatiw synplar

Birnäçe synp aslynda şol bir zady edýär, ýöne usullary başgaça atlandyrylýar.

Wagtlaýyn meýdan

Eger synpda obýektiň diňe wagtal-wagtal zerur bolan wagtlaýyn meýdany bar bolsa, gymmatlyklar bilen doldurylanda we galan wagty boş bolsa ýa-da Hudaý saklasyn, kod “ nullys alýar” we beýle dizaýn şübheli. karar.

Üýtgetmegi kynlaşdyrýan yslar

Bu "yslar" has çynlakaý. Galanlary, esasan, koduň düşünilmegine zyýan ýetirýär, şol bir wagtyň özünde ony üýtgetmäge mümkinçilik bermeýär. Islendik aýratynlyk girizilende, işläp düzüjileriň ýarysy işini taşlar, ýarysy bolsa aklyndan azaşar.

Paralel miras iýerarhiýasy

Bir synpyň kiçi klassyny döredeniňizde, başga bir synp üçin başga bir kiçi klas döretmeli.

Bitewi garaşlylyk paýlanyşy

Islendik üýtgetme amala aşyrylanda, bu synpyň ähli garaşlylygyny (ulanylyşyny) gözlemeli we köp ownuk üýtgeşmeler girizmeli. Bir üýtgeşme - köp synplarda redaktirleme.

Çylşyrymly üýtgetme agajy

Bu ys öňküsiniň tersidir: üýtgeşmeler şol bir synpyň köp sanly usulyna täsir edýär. Düzgün bolşy ýaly, şular ýaly koda garaşlylyk kaskadly: bir usuly üýtgedip, başga birinde bir zady düzetmeli, üçünjisinde we ş.m. Bir synp - köp üýtgeşiklik.

"Zibil ysy"

Kellagyrylara sebäp bolýan ýakymsyz ys kategoriýasy. Peýdasyz, gereksiz, köne kod. Bagtymyza, häzirki zaman IDE-ler we linterler şeýle yslar barada duýduryş bermegi öwrendiler.

Usulda köp sanly teswir

Usulda her setirde diýen ýaly köp düşündirişli teswirler bar. Bu, adatça çylşyrymly algoritm bilen baglanyşykly, şonuň üçin kody birnäçe kiçi usullara bölüp, manyly atlary bermek has gowudyr.

Kod köpeltmek

Dürli synplar ýa-da usullar birmeňzeş kod bloklaryny ulanýarlar.

Yalta synp

Synp gaty köp meýilleşdirilen hem bolsa, gaty az işleýär.

Ulanylmaýan kod

Kodda synp, usul ýa-da üýtgeýji ulanylmaýar we “ölen agram”.

Artykmaç birikdirme

Bu ys kategoriýasy, koddaky köp sanly gereksiz birikmeler bilen häsiýetlendirilýär.

Üçünji tarap usullary

Usul başga bir obýektiň maglumatlaryny öz maglumatlaryndan has ýygy ulanýar.

Opriateerliksiz ýakynlyk

Bir synp hyzmat meýdanlaryny we başga synpyň usullaryny ulanýar.

Uzyn synp jaňlary

Bir synp beýlekisinden jaň edýär, üçünjiden, dördünjiden maglumat soraýar we ş.m. Şeýle uzyn jaňlar zynjyry, häzirki synp gurluşyna ýokary derejede garaşlylygy aňladýar.

Synp-satyjy

Bir synpy başga bir klasa geçirmek üçin zerur. Belki aýyrmalymy?

Täzeden işlemegiň usullary

Aşakda beýan edilen koduň ysyny ýok etmäge kömek etjek başlangyç gaýtadan işleýiş usullary barada gürleşeris.

Synp saýlamak

Synp gaty köp funksiýany ýerine ýetirýär, olaryň käbiri başga klasa geçirilmeli. HumanMysal üçin, ýaşaýyş salgysyny we doly adresi berýän usuly öz içine alýan synp bar :
class Human {
   private String name;
   private String age;
   private String country;
   private String city;
   private String street;
   private String house;
   private String quarter;

   public String getFullAddress() {
       StringBuilder result = new StringBuilder();
       return result
                       .append(country)
                       .append(", ")
                       .append(city)
                       .append(", ")
                       .append(street)
                       .append(", ")
                       .append(house)
                       .append(" ")
                       .append(quarter).toString();
   }
}
Salgy maglumatyny we usulyny (maglumatlary gaýtadan işlemegiň özüni alyp barşyny) aýratyn klasa ýerleşdirmek gowy bolardy:
class Human {
   private String name;
   private String age;
   private Address address;

   private String getFullAddress() {
       return address.getFullAddress();
   }
}
class Address {
   private String country;
   private String city;
   private String street;
   private String house;
   private String quarter;

   public String getFullAddress() {
       StringBuilder result = new StringBuilder();
       return result
                       .append(country)
                       .append(", ")
                       .append(city)
                       .append(", ")
                       .append(street)
                       .append(", ")
                       .append(house)
                       .append(" ")
                       .append(quarter).toString();
   }
}

Usuly saýlamak

Islendik funksiýa bir usul bilen toparlanyp bilinýän bolsa, ony aýratyn usulda ýerleşdirmeli. Mysal üçin, kwadrat deňlemäniň köklerini hasaplaýan usul:
public void calcQuadraticEq(double a, double b, double c) {
    double D = b * b - 4 * a * c;
    if (D > 0) {
        double x1, x2;
        x1 = (-b - Math.sqrt(D)) / (2 * a);
        x2 = (-b + Math.sqrt(D)) / (2 * a);
        System.out.println("x1 = " + x1 + ", x2 = " + x2);
    }
    else if (D == 0) {
        double x;
        x = -b / (2 * a);
        System.out.println("x = " + x);
    }
    else {
        System.out.println("Equation has no roots");
    }
}
Mümkin bolan üç warianty hasaplamagy aýratyn usullara geçireliň:
public void calcQuadraticEq(double a, double b, double c) {
    double D = b * b - 4 * a * c;
    if (D > 0) {
        dGreaterThanZero(a, b, D);
    }
    else if (D == 0) {
        dEqualsZero(a, b);
    }
    else {
        dLessThanZero();
    }
}

public void dGreaterThanZero(double a, double b, double D) {
    double x1, x2;
    x1 = (-b - Math.sqrt(D)) / (2 * a);
    x2 = (-b + Math.sqrt(D)) / (2 * a);
    System.out.println("x1 = " + x1 + ", x2 = " + x2);
}

public void dEqualsZero(double a, double b) {
    double x;
    x = -b / (2 * a);
    System.out.println("x = " + x);
}

public void dLessThanZero() {
    System.out.println("Equation has no roots");
}
Her usulyň kody has gysga we düşnükli boldy.

Obýektiň hemmesini geçirmek

Parametrli usuly çagyranyňyzda, käwagt şuňa meňzeş kody görüp bilersiňiz:
public void employeeMethod(Employee employee) {
    // Некоторые действия
    double yearlySalary = employee.getYearlySalary();
    double awards = employee.getAwards();
    double monthlySalary = getMonthlySalary(yearlySalary, awards);
    // Продолжение обработки
}

public double getMonthlySalary(double yearlySalary, double awards) {
     return (yearlySalary + awards)/12;
}
Usulda employeeMethodbahalary almak we başlangyç üýtgeýänlerde saklamak üçin 2 setir bölünýär. Käwagt şeýle dizaýnlar 10 setire çenli dowam edýär. Zerur maglumatlary alyp bolýan ýerden obýektiň özüni usula geçirmek has aňsat:
public void employeeMethod(Employee employee) {
    // Некоторые действия
    double monthlySalary = getMonthlySalary(employee);
    // Продолжение обработки
}

public double getMonthlySalary(Employee employee) {
    return (employee.getYearlySalary() + employee.getAwards())/12;
}
Pleönekeý, gysga we gysga.

Meýdanlaryň logiki toparlanmagy we olary aýratyn klasa ýerleşdirmek

Aboveokardaky mysallaryň gaty ýönekeýdigine we olara seredeniňde köpler “Aslynda muny kim edýär?” Diýen soragy berip bilerler, köp işläp düzüjiler, biperwaýlygy, kody üýtgetmek islemezligi ýa-da diňe “eder” meňzeş gurluş ýalňyşlyklary.

Näme üçin gaýtadan işlemek täsirli

Gowy gaýtadan işlemegiň netijesi, kody okamak aňsat, programma logikasyna üýtgetmeler howp salmaýar we täze aýratynlyklaryň girizilmegi dowzahy derňeýän koda öwrülmän, bir-iki günüň dowamynda ýakymly işdir. . Programmany noldan täzeden ýazmak has aňsat bolsa, gaýtadan işlemek ulanylmaly däldir. Mysal üçin, topar kody derňemek, derňemek we gaýtadan işlemek üçin zähmet çykdajylarynyň şol bir funksiýany noldan ýerine ýetirmekden has ýokarydygyny çaklaýar. Ora-da gaýtadan işlemeli kody düzetmek kyn bolan köp ýalňyşlyk bar. Koduň gurluşyny nädip gowulandyrmalydygyny bilmek programmistiň işinde hökmanydyr. Dogrusy, Java programmirlemesini JavaRush-da öwrenmek has gowudyr - tejribe ähmiýet berýän onlaýn kurs. Derrew barlamak bilen 1200+ ýumuş, 20 töweregi kiçi taslama, oýun meselesi - bularyň hemmesi kodlaşdyrmaga ynamly bolmaga kömek eder. Başlamak üçin iň amatly wagt indi :) Java-da gaýtadan işlemegiň nähili işleýändigi - 4

Mundan başga-da gaýtadan işlemäge çümmek üçin çeşmeler

Reaktoring hakda iň meşhur kitap “Refactoring. Bar bolan koduň dizaýnyny gowulandyrmak ”atly Martin Fowler. Mundan başga-da, Joşua Kiriewskiniň öňki “Kitaplar bilen gaýtadan işlemek” atly kitabyna esaslanyp, gaýtadan işlemek barada gyzykly neşir bar. Şablonlar barada. Täzeden işlenende, esasy programma dizaýn nagyşlaryny bilmek elmydama örän peýdalydyr. Bu ajaýyp kitaplar muňa kömek eder:
  1. “Dizaýn nagyşlary” - Erik Freeman, Elizabet Freeman, Keti Sierra, “Head First” seriýasyndan Bert Bates;
  2. “Okalýan kod ýa-da sungat hökmünde programmirlemek” - Dustin Boswell, Trevor Faucher.
  3. Stiw Makkonnelliň owadan we owadan kod ýörelgelerini görkezýän “Kämil kod”.
Garaz, gaýtadan işlemek barada birnäçe makala:
  1. Jähennem: geliň, miras koduny täzeden üýtgedip başlalyň ;
  2. Täzeden işlemek ;
  3. Hemmeler üçin gaýtadan işlemek .
    Teswirler
    TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
    GO TO FULL VERSION