Advertisement
GeorgiLukanov87

SOLID HELPER bg

Nov 16th, 2022 (edited)
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.82 KB | None | 0 0
  1. # Single responsibility:
  2. #   - Един обект клас, трябва да бъде отговорен само за една специфична функция
  3. #     и трябва да има само една причина да бъде променян
  4.  
  5.  
  6. # Open/Closed:
  7. #   - Един клас трябва да бъде отворен за екстендване, но затворен за променяне
  8. #     по-този начин си подсигуряваме работещ код, който не изисква рефакториране
  9.  
  10.  
  11. # Liskov substitution:
  12. #   - класовете, които се наследяват трябва да са взаимно заменяеми
  13. #   - тоест, наследяващия клас трябва да правят еднакви неща, тоест абстракция
  14. #   - това се получава с разширяване на бейс класа.
  15. #   - усещаме се, че нарушаваме принципа, като имаме методи на клас, които реално той не може/не трябва да има
  16.  
  17.  
  18. # Interface Segregation:
  19. #   - основната идея е да нямаме методи, които не използваме,
  20. #   - това в пайтън можем да постигнем, чрез миксини
  21.  
  22.  
  23. # Dependency inversion:
  24. #   - трябва да пазим бащиния клас да не знае нищо за класа, който го наследява
  25. #   - детайлите зависят на абстракцията, а не абстракцията на детайлите
  26. #   - тоест примерно не проверяваме в парент класа isinstance
  27. #   - тоест парента не знае нищо за наследниците
  28.  
  29.  
  30. # Dependency Injection - подчаст на Dependency Inversion
  31. #   - инжектираме готова инстанция в класа, въпрос на контекст е дали в метод или инит
  32.  
  33.  
  34. ====================================================================================================================
  35.  
  36.  
  37. 1) The Single-responsibility principle (SRP)
  38. “A class should have one, and only one, reason to change”
  39.  
  40. In other words, every component of your code (in general a class, but also a function) should have one and only one responsibility.
  41. As a consequence of that, there should be only a reason to change it.
  42.  
  43. - Един обект клас, трябва да бъде отговорен само за една специфична функция и трябва да има само една причина да бъде променян.
  44.  
  45.  
  46. ------------------------------------------------------------------------------------------------------------
  47.  
  48.  
  49. 2) The Open–closed principle (OCP)
  50. “Software entities … should be open for extension but closed for modification”
  51.  
  52. In other words: You should not need to modify the code you have already written to accommodate new functionality, but simply add what you now need.
  53.  
  54. - Един клас трябва да бъде отворен за екстендване, но затворен за променяне по-този начин си подсигуряваме работещ код, който не изисква рефакториране
  55.  
  56.  
  57. ---------------------------------------------------------------------------------------------------------------
  58.  
  59.  
  60.  
  61. 3) The Liskov substitution principle (LSP)
  62. “Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it”
  63.  
  64. Alternatively, this can be expressed as “Derived classes must be substitutable for their base classes”.
  65. In (maybe) simpler words, if a subclass redefines a function also present in the parent class, a client-user should not be noticing any difference
  66. in behaviour, and it is a substitute for the base class.
  67. For example, if you are using a function and your colleague change the base class, you should not notice any difference in the function that you are using.
  68.  
  69. Ако сменим наследника с базовия клас, накрая трябва да имаме същата функционалност. Всеки наследник само екстендва функционалността на базовия клас
  70. и не би трябвало да премахва поведение от базовия клас, т.е. трябва да може само да добавя.
  71. - класовете, които се наследяват трябва да са взаимно заменяеми
  72. - тоест, наследяващия клас трябва да правят еднакви неща, тоест абстракция
  73. - това се получава с разширяване на бейс класа.
  74. - усещаме се, че нарушаваме принципа, като имаме методи на клас, които реално той не може/не трябва да има
  75.  
  76.  
  77. ----------------------------------------------------------------------------------------------------------------
  78.  
  79.  
  80. 4) The Interface Segregation Principle (ISP)
  81. “Many client-specific interfaces are better than one general-purpose interface”
  82.  
  83. In the contest of classes, an interface is considered, all the methods and properties “exposed”, thus,
  84. everything that a user can interact with that belongs to that class.
  85.  
  86.  - основната идея е да нямаме методи, които не използваме,
  87.  - това в пайтън можем да постигнем, чрез миксини
  88.  
  89.  
  90.  ------------------------------------------------------------------------------------------------------------------
  91.  
  92.  
  93. 5) The Dependency Inversion Principle (DIP)
  94. “Abstractions should not depend on details. Details should depend on abstraction. High-level modules should not depend on low-level modules.
  95. Both should depend on abstractions”
  96.  
  97. So, that abstractions (e.g., the interface, as seen above) should not be dependent on low-level methods but both should depend on a third interface.
  98.  
  99.  - трябва да пазим бащиния клас да не знае нищо за класа, който го наследява
  100.  - детайлите зависят на абстракцията, а не абстракцията на детайлите
  101.  - тоест примерно не проверяваме в парент класа isinstance
  102.  - тоест парента не знае нищо за наследниците
  103.  
  104.   Dependency Injection - подчаст на Dependency Inversion
  105.    - инжектираме готова инстанция в класа, въпрос на контекст е дали в метод или инит
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement