{"id":923226,"date":"2024-06-27T08:36:38","date_gmt":"2024-06-27T08:36:38","guid":{"rendered":"https:\/\/proxyelite.info\/?p=923226"},"modified":"2024-06-27T08:36:39","modified_gmt":"2024-06-27T08:36:39","slug":"what-are-solid-principles-and-why-are-they-important","status":"publish","type":"post","link":"https:\/\/proxyelite.info\/tr\/what-are-solid-principles-and-why-are-they-important\/","title":{"rendered":"KATI \u0130lkeler Nelerdir ve Neden \u00d6nemlidirler?"},"content":{"rendered":"<p class=\"wp-block-paragraph\">SOLID ilkeleri, bak\u0131m\u0131 yap\u0131labilir, \u00f6l\u00e7eklenebilir ve sa\u011flam yaz\u0131l\u0131m tasarlamaya y\u00f6nelik temel y\u00f6nergelerdir. Robert C. Martin (Bob Amca) taraf\u0131ndan tan\u0131t\u0131lan bu ilkeler, geli\u015ftiricilerin daha esnek ve y\u00f6netimi daha kolay sistemler olu\u015fturmas\u0131na yard\u0131mc\u0131 olur. SOLID ilkelerini anlamak ve uygulamak, de\u011fi\u015fen gereksinimlere uyum sa\u011flayabilecek y\u00fcksek kaliteli yaz\u0131l\u0131mlar olu\u015fturmak i\u00e7in \u00e7ok \u00f6nemlidir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tek Sorumluluk \u0130lkesi (SRP)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tan\u0131m<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tek Sorumluluk \u0130lkesi (SRP), bir s\u0131n\u0131f\u0131n de\u011fi\u015fmek i\u00e7in yaln\u0131zca bir nedeni olmas\u0131 gerekti\u011fini, yani yaln\u0131zca tek bir i\u015fe veya sorumlulu\u011fa sahip olmas\u0131 gerekti\u011fini belirtir. Bu prensip, s\u0131n\u0131flar\u0131n odaklanm\u0131\u015f ve y\u00f6netilebilir tutulmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faydalar<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>S\u00fcrd\u00fcr\u00fclebilirlik<\/strong>: Kodun anla\u015f\u0131lmas\u0131n\u0131 ve g\u00fcncellenmesini kolayla\u015ft\u0131r\u0131r.<\/li>\n\n\n\n<li><strong>Test edilebilirlik<\/strong>: Tek sorumlulu\u011fa sahip s\u0131n\u0131flar\u0131n test edilmesi daha kolayd\u0131r.<\/li>\n\n\n\n<li><strong>Esneklik<\/strong>: De\u011fi\u015fiklikler belirli s\u0131n\u0131flara g\u00f6re lokalize edilerek yan etki riski azalt\u0131l\u0131r.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Aletler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Statik Kod Analizi<\/strong>: SonarQube gibi ara\u00e7lar, birden fazla sorumlulu\u011fu olan s\u0131n\u0131flar\u0131n belirlenmesine yard\u0131mc\u0131 olabilir.<\/li>\n\n\n\n<li><strong>Yeniden D\u00fczenleme Ara\u00e7lar\u0131<\/strong>: IntelliJ IDEA ve Visual Studio gibi IDE&#039;ler, s\u0131n\u0131flar\u0131n tek sorumluluk varl\u0131klar\u0131na b\u00f6l\u00fcnmesine yard\u0131mc\u0131 olacak yeniden d\u00fczenleme ara\u00e7lar\u0131 sa\u011flar.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6rnek<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hem kullan\u0131c\u0131 kimlik do\u011frulamas\u0131n\u0131 hem de veri g\u00fcnl\u00fc\u011f\u00fcn\u00fc y\u00f6neten bir s\u0131n\u0131f d\u00fc\u015f\u00fcn\u00fcn. Bu, SRP&#039;yi ihlal eder \u00e7\u00fcnk\u00fc birden fazla sorumlulu\u011fu vard\u0131r. Bu sorumluluklar\u0131 biri kimlik do\u011frulama ve di\u011feri g\u00fcnl\u00fck kayd\u0131 i\u00e7in olmak \u00fczere iki ayr\u0131 s\u0131n\u0131fa ay\u0131rarak SRP&#039;ye uyuyor ve sistemin s\u00fcrd\u00fcr\u00fclebilirli\u011fini geli\u015ftiriyoruz.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code data-no-translation=\"\">class Authenticator:\n    def authenticate_user(self, user_credentials):\n        # Authentication logic here\n\nclass Logger:\n    def log_message(self, message):\n        # Logging logic here\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">A\u00e7\u0131k\/Kapal\u0131 Prensibi (OCP)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tan\u0131m<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00e7\u0131k\/Kapal\u0131 Prensibi (OCP), yaz\u0131l\u0131m varl\u0131klar\u0131n\u0131n geni\u015fletmeye a\u00e7\u0131k ancak de\u011fi\u015fiklik i\u00e7in kapal\u0131 olmas\u0131 gerekti\u011fini belirtir. Bu, mevcut kodu de\u011fi\u015ftirmeden yeni i\u015flevler ekleyebilmeniz gerekti\u011fi anlam\u0131na gelir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faydalar<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Geni\u015fletilebilirlik<\/strong>: Mevcut kod de\u011fi\u015ftirilmeden yeni \u00f6zellikler eklenebilir.<\/li>\n\n\n\n<li><strong>istikrar<\/strong>: Mevcut kod de\u011fi\u015fmeden kal\u0131r ve sistem kararl\u0131l\u0131\u011f\u0131 korunur.<\/li>\n\n\n\n<li><strong>Tekrar Kullan\u0131labilirlik<\/strong>: Kodun yeniden kullan\u0131lmas\u0131n\u0131 sa\u011flayarak soyutlamalar\u0131n kullan\u0131m\u0131n\u0131 te\u015fvik eder.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Aletler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tasar\u0131m desenleri<\/strong>: Strateji, Dekorat\u00f6r ve Fabrika gibi kal\u0131plar OCP&#039;nin uygulanmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n\n\n\n<li><strong>\u00c7er\u00e7eveler<\/strong>: Java i\u00e7in Spring ve JavaScript i\u00e7in Angular gibi Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyon \u00e7er\u00e7eveleri, aray\u00fczlerin kullan\u0131m\u0131n\u0131 ve ba\u011f\u0131ml\u0131l\u0131k enjeksiyonunu te\u015fvik ederek OCP&#039;yi destekler.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6rnek<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mevcut s\u0131n\u0131flar\u0131 de\u011fi\u015ftirmeden i\u015flevselli\u011fi geni\u015fletmek i\u00e7in polimorfizm kullanmak OCP&#039;ye uygundur. \u00d6rne\u011fin, mevcut kodu de\u011fi\u015ftirmeden yeni \u015fekillerin eklenebildi\u011fi bir \u015fekil \u00e7izim uygulamas\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code data-no-translation=\"\">class Shape:\n    def draw(self):\n        pass\n\nclass Circle(Shape):\n    def draw(self):\n        # Drawing logic for circle\n\nclass Square(Shape):\n    def draw(self):\n        # Drawing logic for square\n\ndef draw_shape(shape: Shape):\n    shape.draw()\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Liskov \u0130kame Prensibi (LSP)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tan\u0131m<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Liskov De\u011fi\u015ftirme Prensibi (LSP), bir \u00fcst s\u0131n\u0131f\u0131n nesnelerinin, program\u0131n do\u011frulu\u011funu etkilemeden bir alt s\u0131n\u0131f\u0131n nesneleriyle de\u011fi\u015ftirilebilmesi gerekti\u011fini belirtir. Bu, bir alt s\u0131n\u0131f\u0131n kendi \u00fcst s\u0131n\u0131f\u0131n\u0131n yerine ge\u00e7ebilmesini sa\u011flar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faydalar<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>De\u011fi\u015ftirilebilirlik<\/strong>: Alt s\u0131n\u0131flar, \u00fcst s\u0131n\u0131flar\u0131yla birbirinin yerine kullan\u0131labilir.<\/li>\n\n\n\n<li><strong>G\u00fcvenilirlik<\/strong>: Alt s\u0131n\u0131flar\u0131 kullan\u0131rken sistemin do\u011fru davranmas\u0131n\u0131 sa\u011flar.<\/li>\n\n\n\n<li><strong>Tutarl\u0131l\u0131k<\/strong>: S\u0131n\u0131f hiyerar\u015fisinde tutarl\u0131 davran\u0131\u015f\u0131 te\u015fvik eder.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Aletler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Statik Tip Damalar<\/strong>: Python i\u00e7in MyPy gibi ara\u00e7lar, t\u00fcr do\u011frulu\u011funu sa\u011flayarak LSP&#039;nin uygulanmas\u0131na yard\u0131mc\u0131 olabilir.<\/li>\n\n\n\n<li><strong>Birim Testi<\/strong>: Uyumlulu\u011fu sa\u011flamak i\u00e7in \u00fcst s\u0131n\u0131f davran\u0131\u015flar\u0131 i\u00e7in testler yazmak ve bunlar\u0131 alt s\u0131n\u0131flara kar\u015f\u0131 \u00e7al\u0131\u015ft\u0131rmak.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6rnek<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bir s\u00fcper s\u0131n\u0131f d\u00fc\u015f\u00fcn\u00fcn <code data-no-translation=\"\">Bird<\/code> ve bir alt s\u0131n\u0131f <code data-no-translation=\"\">Penguin<\/code>. E\u011fer <code data-no-translation=\"\">Bird<\/code> s\u0131n\u0131f\u0131n bir y\u00f6ntemi var <code data-no-translation=\"\">fly<\/code>, Ancak <code data-no-translation=\"\">Penguin<\/code> u\u00e7amaz, LSP&#039;yi ihlal eder. Bunun yerine y\u00f6ntemler, t\u00fcm alt s\u0131n\u0131flar\u0131n bunlar\u0131 uygun \u015fekilde uygulayabilece\u011fi \u015fekilde tasarlanmal\u0131d\u0131r.<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code data-no-translation=\"\">class Bird:\n    def move(self):\n        pass\n\nclass Penguin(Bird):\n    def move(self):\n        # Penguins waddle instead of flying\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Aray\u00fcz Ayr\u0131\u015ft\u0131rma Prensibi (ISP)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tan\u0131m<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aray\u00fcz Ayr\u0131\u015ft\u0131rma Prensibi (ISP), bir istemcinin kullanmad\u0131\u011f\u0131 aray\u00fczlere ba\u011f\u0131ml\u0131 olmaya zorlanmamas\u0131 gerekti\u011fini belirtir. Bu, tek bir b\u00fcy\u00fck, genel ama\u00e7l\u0131 aray\u00fcz yerine spesifik, ince taneli aray\u00fczler olu\u015fturmak anlam\u0131na gelir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faydalar<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ayr\u0131\u015fma<\/strong>: Daha k\u00fc\u00e7\u00fck, spesifik aray\u00fczler s\u0131n\u0131flar aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 azalt\u0131r.<\/li>\n\n\n\n<li><strong>Uyum<\/strong>: Daha uyumlu ve odaklanm\u0131\u015f aray\u00fczleri destekler.<\/li>\n\n\n\n<li><strong>Esneklik<\/strong>: De\u011fi\u015fiklikleri uygulamak ve yeni i\u015flevler eklemek daha kolayd\u0131r.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Aletler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Aray\u00fcz \u00c7\u0131karma Ara\u00e7lar\u0131<\/strong>: Eclipse ve IntelliJ IDEA gibi IDE&#039;ler mevcut s\u0131n\u0131flardan aray\u00fczlerin \u00e7\u0131kar\u0131lmas\u0131na yard\u0131mc\u0131 olabilir.<\/li>\n\n\n\n<li><strong>Kod \u0130nceleme Ara\u00e7lar\u0131<\/strong>: GitHub ve Bitbucket gibi platformlar, akran de\u011ferlendirmeleri yoluyla ISP&#039;ye ba\u011fl\u0131l\u0131\u011f\u0131n sa\u011flanmas\u0131na yard\u0131mc\u0131 olabilir.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6rnek<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Geni\u015f bir aray\u00fcz <code data-no-translation=\"\">Worker<\/code> her ikisi i\u00e7in de y\u00f6ntemler i\u00e7erir <code data-no-translation=\"\">developer<\/code> Ve <code data-no-translation=\"\">manager<\/code> g\u00f6revler ISP&#039;yi ihlal ediyor. Bunun yerine onu iki aray\u00fcze b\u00f6l\u00fcn:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code data-no-translation=\"\">class Developer:\n    def write_code(self):\n        pass\n\nclass Manager:\n    def manage_team(self):\n        pass\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 Tersine \u00c7evirme Prensibi (DIP)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Tan\u0131m<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 Ters \u00c7evirme \u0130lkesi (DIP), y\u00fcksek seviyeli mod\u00fcllerin d\u00fc\u015f\u00fck seviyeli mod\u00fcllere ba\u011fl\u0131 olmamas\u0131 gerekti\u011fini belirtir. Her ikisi de soyutlamalara ba\u011fl\u0131 olmal\u0131d\u0131r. Ayr\u0131ca soyutlamalar ayr\u0131nt\u0131lara ba\u011fl\u0131 olmamal\u0131d\u0131r. Ayr\u0131nt\u0131lar soyutlamalara ba\u011fl\u0131 olmal\u0131d\u0131r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faydalar<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Ayr\u0131\u015fma<\/strong>: Y\u00fcksek seviyeli mod\u00fcller, d\u00fc\u015f\u00fck seviyeli mod\u00fcllerden ayr\u0131lm\u0131\u015ft\u0131r.<\/li>\n\n\n\n<li><strong>Esneklik<\/strong>: \u00dcst d\u00fczey mod\u00fclleri etkilemeden sistemi de\u011fi\u015ftirmek ve geni\u015fletmek daha kolayd\u0131r.<\/li>\n\n\n\n<li><strong>Test edilebilirlik<\/strong>: Ba\u011f\u0131ml\u0131l\u0131k ekleme yoluyla iyile\u015ftirilmi\u015f test edilebilirlik.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Aletler<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyon \u00c7er\u00e7eveleri<\/strong>: Java i\u00e7in Spring, Java ve Android i\u00e7in Dagger ve Java i\u00e7in Guice gibi \u00e7er\u00e7eveler DIP&#039;i kolayla\u015ft\u0131rabilir.<\/li>\n\n\n\n<li><strong>Alayc\u0131 \u00c7er\u00e7eveler<\/strong>: Java i\u00e7in Mockito ve Python i\u00e7in Unittest.mock gibi ara\u00e7lar, test ama\u00e7l\u0131 sahte nesneler olu\u015fturmaya yard\u0131mc\u0131 olabilir.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00d6rnek<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Do\u011frudan d\u00fc\u015f\u00fck seviyeli bir s\u0131n\u0131f\u0131 ba\u015flatan y\u00fcksek seviyeli bir s\u0131n\u0131f yerine bir soyutlama kullan\u0131n:<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code data-no-translation=\"\">class MessageService:\n    def send_message(self, message):\n        pass\n\nclass EmailService(MessageService):\n    def send_message(self, message):\n        # Email sending logic here\n\nclass Notification:\n    def __init__(self, service: MessageService):\n        self.service = service\n\n    def notify(self, message):\n        self.service.send_message(message)\n<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c7\u00f6z\u00fcm<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SOLID ilkeleri, bak\u0131m\u0131 yap\u0131labilir, \u00f6l\u00e7eklenebilir ve sa\u011flam bir yaz\u0131l\u0131m tasarlamak i\u00e7in \u00e7ok \u00f6nemlidir. Geli\u015ftiriciler bu ilkelere ba\u011fl\u0131 kalarak daha esnek ve y\u00f6netimi daha kolay sistemler olu\u015fturabilirler. SOLID ilkelerini anlamak ve uygulamak, yaz\u0131l\u0131m\u0131n kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir ve uzun vadeli ba\u015far\u0131s\u0131n\u0131 garanti edebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Etkili yaz\u0131l\u0131m tasar\u0131m\u0131n\u0131n anahtar\u0131n\u0131n s\u00fcrekli \u00f6\u011frenme ve pratikte yatt\u0131\u011f\u0131n\u0131 unutmay\u0131n. Bu ilkeleri projelerinizde uygulamaya ba\u015flay\u0131n; kod taban\u0131n\u0131za getirdikleri faydalar\u0131 yak\u0131nda g\u00f6receksiniz. Mutlu kodlama!<\/p>","protected":false},"excerpt":{"rendered":"<p>SOLID principles are fundamental guidelines for designing software that is maintainable, scalable, and robust. Introduced by Robert C. Martin (Uncle Bob), these principles help developers create systems that are more flexible and easier to manage. Understanding and applying SOLID principles is essential for building high-quality software that can adapt to changing requirements. The Single Responsibility [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":923227,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-923226","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"acf":[],"_links":{"self":[{"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/posts\/923226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/comments?post=923226"}],"version-history":[{"count":0,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/posts\/923226\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/media\/923227"}],"wp:attachment":[{"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/media?parent=923226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/categories?post=923226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/proxyelite.info\/tr\/wp-json\/wp\/v2\/tags?post=923226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}