Ата-эне менен баланын ыкмалары кагылышканда!
TL; DR: Ата-эне класстарында бала класстар колдоно турган ысымдар менен жеке ыкмаларды колдонуудан качыңыз.
Ата-эне жана бала класстарында бир эле методдун аталышын колдонгондо, баш аламандык жаратасыз.
Ата-эне классындагы жеке ыкманы бала класста бирдей аталыштагы жалпы ыкма бар болсо да жокко чыгарууга болбойт.
Бул көпчүлүк статикалык тилдердин дизайнында бар көйгөй. Бул ажыратуу мүчүлүштүктөргө алып келет жана кодуңузду сактоону кыйындатат.
<? class ParentClass { private function greet() { // This method is private return "Hello from ParentClass"; } public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { public function greet() { // Overriding a concrete method is a code smell // Compilers SHOULD warn you return "Hello from ChildClass"; } } $child = new ChildClass(); echo $child->callGreet(); // When callGreet() is invoked on the $child object, // it executes the following: // It calls $this->greet(), // which refers to the greet() method of ParentClass // because the original method is private // and cannot be overridden or accessed from ChildClass. // The unexpected output is 'Hello from ParentClass'
<? class ParentClass { protected function greet() { // notice the 'protected qualifier' return "Hello from ParentClass"; } public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { public function greet() { return "Hello from ChildClass"; } } $child = new ChildClass(); echo $child->callGreet(); // The output is "Hello from ChildClass" // This is the standard (and wrong) solution // Also fixed by most AIs
<? abstract class ParentClass { // Declare greet() as an abstract method // Following the template-method design pattern abstract protected function greet(); public function callGreet() { return $this->greet(); } } class ChildClass extends ParentClass { protected function greet() { return "Hello from ChildClass"; } } class OtherChild extends ParentClass { protected function greet() { return "Hello from OtherChild"; } } $child = new ChildClass(); echo $child->callGreet(); // Output: Hello from ChildClass $otherChild = new OtherChild(); echo $otherChild->callGreet(); // Output: Hello from OtherChild
Сиз ата-энелер класстарындагы жеке ыкмаларды издөө жана бала класстар бирдей аталыштагы ыкмаларды аныктап же жокпу, текшерүү аркылуу бул жытты аныктай аласыз. Ошондой эле жеке ыкмаларды чакырган ата-эне ыкмаларын сынап көрүшүңүз керек.
Ачык жана алдын ала боло турган код, ал моделдештирген реалдуу дүйнө иерархиясын чагылдырышы керек.
Кайталанган аттар менен жеке ыкмаларды колдонгонуңузда, сиз модель менен ишке ашыруунун ортосунда Bijection боштугун түзөсүз.
Бул боштук иштеп чыгуучуларды чаташтырат, кемчиликтерди көбөйтөт жана таза код принциптерин бузат.
AI генераторлору көбүнчө ата-эне менен баланын мамилесин түзгөндө бул жытты жаратат.
Алар кирүү деңгээлин текшербеши же мурастын кесепеттерин эске албашы мүмкүн.
AI куралдары бул жытты так көрсөтмөлөр менен оңдой алат.
Сиз AIдан кайталанган ыкма аталыштарын жана рефактор иерархияларын текшерүүнү сурансаңыз болот.
Аларды сынап көрүңүз!
Эсиңизде болсун: AI жардамчылары көп ката кетиришет
Тиешелүү көрсөтмөлөрсүз | Конкреттүү нускамалар менен |
---|---|
Ата-эне жана бала класстарын түзүүдө мурасты жана жеткиликтүүлүктү так аныктаган ыкмаларды колдонуу керек.
Балдар ыкмалары менен дал келген жеке ыкмалардан качыңыз. Бул сиздин кодуңузду окула турган, кеңейтилүүчү жана таза код принциптерине шайкеш келтирет.
Python сыяктуу тилдер ата-эне ыкмаларын атына карабастан жокко чыгарууга мүмкүндүк берет, ал эми Java кирүү деңгээлдерин катуу талап кылат.
C# өзүн Java менен окшош жүргүзөт. Бул айырмачылыктар күтүлбөгөн жүрүм-турумду болтурбоо үчүн сиз иштеп жаткан тилдин конкреттүү эрежелерин түшүнүү керек дегенди билдирет.
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxviii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-iii-t7h3zkv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
Жоопкерчиликтен баш тартуу: Код жыттары менин оюм .
Кредиттер: Unsplash сайтында Мэтт Арцтын сүрөтү
Мурас жакшы, бирок ал тыгыз байланышты киргизерин эч качан унутпаш керек.
Роберт C. Мартин
Бул макала HackerNoon боюнча CodeSmell сериясынын бир бөлүгү.