paint-brush
Code Smell 286 - Ата-эне менен баланын ыкмасы бири-бирине дал келеттарабынан@mcsee
Жаңы тарых

Code Smell 286 - Ата-эне менен баланын ыкмасы бири-бирине дал келет

тарабынан Maximiliano Contieri4m2025/01/16
Read on Terminal Reader

өтө узун; Окуу

Ата-эне-бала класстарындагы жеке ыкмалардын кагылышуусу мүчүлүштүктөргө жана код жыттарына алып келиши мүмкүн. Ата-эне класстарындагы балдар класстары колдоно ала турган ысымдар менен ата-эне класстарындагы так атоону сактоо, бири-бирин кайталоону болтурбоо жана таза код ыкмаларын колдонуу менен мындан качыңыз.
featured image - Code Smell 286 - Ата-эне менен баланын ыкмасы бири-бирине дал келет
Maximiliano Contieri HackerNoon profile picture
0-item

Ата-эне менен баланын ыкмалары кагылышканда!


TL; DR: Ата-эне класстарында бала класстар колдоно турган ысымдар менен жеке ыкмаларды колдонуудан качыңыз.

Көйгөйлөр

  • Эң аз күтүлбөгөн принципти бузуу
  • Күтүлбөгөн жүрүм-турум жана кемчиликтер
  • Жашыруун көз карандылыктар
  • Чектелген узартуу
  • Коддун түшүнүксүздүгү
  • Ачык/жабык принцибинин бузулушу
  • Адаштыруучу дизайн

Чечимдер

  1. Иерархиялардан алыс болуңуз
  2. Жеке ыкмалардын атын өзгөртүү
  3. Атын так сактаңыз
  4. Кайталанган аттардан алыс болуңуз
  5. Корголгон ыкмалардан качыңыз
  6. Кодду кайра колдонуу үчүн эмес, маанилүү мамилелер үчүн субклассификациялоо

Контекст

Ата-эне жана бала класстарында бир эле методдун аталышын колдонгондо, баш аламандык жаратасыз.

Ата-эне классындагы жеке ыкманы бала класста бирдей аталыштагы жалпы ыкма бар болсо да жокко чыгарууга болбойт.

Бул көпчүлүк статикалык тилдердин дизайнында бар көйгөй. Бул ажыратуу мүчүлүштүктөргө алып келет жана кодуңузду сактоону кыйындатат.

Үлгү код

туура эмес

 <? 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

аныктоо

  • [x] Жарым автоматтык

Сиз ата-энелер класстарындагы жеке ыкмаларды издөө жана бала класстар бирдей аталыштагы ыкмаларды аныктап же жокпу, текшерүү аркылуу бул жытты аныктай аласыз. Ошондой эле жеке ыкмаларды чакырган ата-эне ыкмаларын сынап көрүшүңүз керек.

Тегдер

  • иерархия

Деңгээл

  • [x] Орто

Эмне үчүн Bijection маанилүү

Ачык жана алдын ала боло турган код, ал моделдештирген реалдуу дүйнө иерархиясын чагылдырышы керек.

Кайталанган аттар менен жеке ыкмаларды колдонгонуңузда, сиз модель менен ишке ашыруунун ортосунда Bijection боштугун түзөсүз.

Бул боштук иштеп чыгуучуларды чаташтырат, кемчиликтерди көбөйтөт жана таза код принциптерин бузат.

AI мууну

AI генераторлору көбүнчө ата-эне менен баланын мамилесин түзгөндө бул жытты жаратат.

Алар кирүү деңгээлин текшербеши же мурастын кесепеттерин эске албашы мүмкүн.

AI аныктоо

AI куралдары бул жытты так көрсөтмөлөр менен оңдой алат.

Сиз AIдан кайталанган ыкма аталыштарын жана рефактор иерархияларын текшерүүнү сурансаңыз болот.


Аларды сынап көрүңүз!

Эсиңизде болсун: AI жардамчылары көп ката кетиришет

Тиешелүү көрсөтмөлөрсүз

Конкреттүү нускамалар менен

ChatGPT

ChatGPT

Клод

Клод

Башаламандык

Башаламандык

Копилот

Копилот

Эгиздер

Эгиздер

Корутунду

Ата-эне жана бала класстарын түзүүдө мурасты жана жеткиликтүүлүктү так аныктаган ыкмаларды колдонуу керек.

Балдар ыкмалары менен дал келген жеке ыкмалардан качыңыз. Бул сиздин кодуңузду окула турган, кеңейтилүүчү жана таза код принциптерине шайкеш келтирет.

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 сериясынын бир бөлүгү.


L O A D I N G
. . . comments & more!

About Author

Maximiliano Contieri HackerNoon profile picture
Maximiliano Contieri@mcsee
I’m a sr software engineer specialized in Clean Code, Design and TDD Book "Clean Code Cookbook" 500+ articles written

ТАГИП АЛУУ

БУЛ МАКАЛА БЕРИЛГЕН...