Принцип єдиної відповідальності

Принцип єдиної відповідальності[1] (англ. Single Responsibility Principle, SRP) — важливий принцип об'єктно-орієнтованого програмування, який означає, що клас має бути створений для виконання лише однієї задачі, яку він повинен повністю інкапсулювати. Отже, всі сервіси цього класу мають бути повністю підпорядковані її виконанню.

Роберт Мартін, засновник терміна, висловлює принцип так: «Клас повинен мати лише одну причину для змін»[2], хоча через плутанину навколо слова «причина» він також заявив: «Цей принцип стосується людей»[3]. У деяких своїх виступах він також стверджує, що принцип стосується, зокрема, ролей чи акторів. Наприклад, хоча вони можуть бути однією людиною, роль бухгалтера відрізняється від адміністратора бази даних. Отже, кожен модуль повинен відповідати за кожну роль[1].

Історія

Термін був запроваджений Робертом Мартіном в однойменній статті як частина його принципів об'єктно-орієнтованого програмування, що поширився завдяки його книзі «Швидка розробка програм. Принципи, приклади, практика». Мартін описав її як засновану на принципі зв'язності, сформульованого Томом ДеМарко в його книзі «Structured Analysis and Systems Specification»[4].

Приклад порушення SRP

Нехай в системі є клас, що представляє в ній робітника:

public class Employee {
  private String name;
  // інші поля

  public String getName() {
      return name;
  }
  // інші методи

  public void printReport() {
      // код для друкування звіту
  }
}

Крім цього, існує можливість друкувати звіт про робітника за допомогою методу printReport(). Це і є порушення SRP.

Для прикладу, розглянемо випадок зміни формату звіту. Це змусить програмістів редагувати printReport(), що, можливо, призведе до зміни робочого коду, що відповідає за представлення робітника. Та навпаки, якщо у клас буде додано будь-яка нова функціональність, наприклад поле telNumber, то ці зміни будуть впливати на вміст звіту. А редагуючи вміст, можна зачепити формат звіту.

Очевидно, що проблема полягає в багатоцільовому Employee. Тому її рішення буде наступним — розділити його функціональність, наприклад так:

public class Employee {
  private String name;
  // інші поля

  public String getName() {
      return name;
  }
  // інші методи
}
public class Reporter {
  public void printReport(Employee worker) {
      // код для друкування звіту
  } 
}

Переваги та недоліки

Серед плюсів варто відмітити такі:

  • протидіє дублюванню коду, адже якщо функціональність розташована в неправильному місці, то доведеться копіювати її в потрібне;
  • зменшує можливість зміни вже випробуваного коду;
  • забезпечує відповідність назв класів та їх функціональності, що полегшує життя тим, хто обслуговуватиме цей код в майбутньому.

Мінус використання полягає в зростанні кількості класів, що приводить до зростання складності системи.

Використання

SOLID — буква «S» означає принцип єдиного обов'язку (англ. Single Responsibility Principle).

Див. також

Примітки

  1. а б Мартін, Роберт (2019). Розділ 13. Зв'язність компонентів: Принцип узгодженої зміни. Чиста архітектура: Мистецтво розроблення програмного забезпечення. «Ранок», Фабула. с. 125—126. ISBN 978-617-09-5286-8.
  2. Мартін, Роберт (2021). Чистий Agile. «Ранок», Фабула. с. 224. ISBN 978-617-09-6760-2.
  3. Martin, Robert C. (2014). The Single Responsibility Principle. The Clean Code Blog. Архів оригіналу за 8 жовтня 2018. Процитовано 6 листопада 2021.
  4. DeMarco, Tom. (1979). Structured Analysis and System Specification. Prentice Hall. ISBN 0138543801.

Посилання

  • OOD Principles (рос.)

Read other articles:

William A. Clark William Andrews Clark, Sr. (8 Januari 1839 – 2 Maret 1925) adalah seorang politikus dan pengusaha Amerika Serikat, terlibat dalam pertambangan, perbankan dan rel kereta api. Lahir di Connellsville, Pennsylvania dan meninggal di New York City, ia pernah menjabat sebagai Senator Montana. Ia juga mendirikan perusahaan Los Angeles and Salt Lake Railroad. Lihat pula Atlantic Cable Quartz Lode Catatan kaki Biographical Directory of the U.S. Congress, William Andrews...

 

Patung Kamadenu alias Surabi di suatu kuil Hindu di Batu Caves, Malaysia. Kamadenu (Dewanagari: कामधेनु; ,IAST: Kāmadhenu,; [kaːmɐˈdʱeːnʊ]), juga dikenal dengan nama Surabi (Dewanagari: सुरभी; ,IAST: Surabhī, सुरभी),[1] adalah nama dewi sapi dalam agama Hindu yang diyakini sebagai ibu bagi semua sapi. Ia adalah sapi ajaib yang mampu memenuhi apa pun yang diinginkan oleh pemeliharanya, dan seringkali dikisahkan sebagai ...

 

Ini adalah nama Batak Toba, marganya adalah Sihombing. Wahyu SihombingLahir(1932-08-15)15 Agustus 1932Tapanuli, Hindia BelandaMeninggal30 Desember 1989(1989-12-30) (umur 57)Jakarta, IndonesiaPekerjaanaktor, sutradaraTahun aktif1950–1989 Wahyu Sihombing (15 Agustus 1932 – 30 Desember 1989)[1] adalah salah satu sutradara senior Indonesia. Ia adalah suami dari Tatiek W. Maliyati, penuli skenario senior Indonesia. Salah satu karyanya yang terkenal adalah serial...

Orang-orang Lunang LunangKecamatanNegara IndonesiaProvinsiSumatera BaratKabupatenPesisir SelatanPemerintahan • CamatDrs. Irwan[1]Populasi • Total20,690 jiwa jiwaKode Kemendagri13.01.10 Kode BPS1302012 Luas- KM²Nagari/kelurahan10 Kenagarian Lunang adalah sebuah kecamatan di Kabupaten Pesisir Selatan, provinsi Sumatera Barat, Indonesia.[1][2] Sejarah Di Lunang ini terdapat keluarga Mande Rubiah yang dipercaya merupakan keturunan Bundo Kandua...

 

Alleged extra-terrestrial beings Grey alienIllustration of an archetypal Grey alienGroupingextraterrestrial or being of other originSimilar entitiesReptilian humanoid, little green menFolkloreUfologyOther name(s)Zeta Reticulian, Roswell Grey, Roswell Alien, GraysRegionWorldwideDetailsHumanoid with a small and frail body (sometimes appearing as tall), grey skin, large forehead, almond-shaped black eyes, small noses, lips, and ears. Entered folklore with the Barney and Betty Hill abduction case...

 

Questa voce sull'argomento calciatori italiani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Egidio De Franceschi Nazionalità  Italia Calcio Ruolo Difensore Carriera Squadre di club1 1922-1923 Edera Pola? (?)1923-1924 Grion Pola? (?)1924-1925 Lazio2 (0)1925 Fortitudo8 (5)1925-1926 Edera Pola? (?)1926-1927 Ponziana? (?)1927-1928 Grion Pola? (?)1929-1932 Mo...

Tampilan Gula Kelapa, atau lebih dikenal dengan sebutan 'Gula Jawa'. Gula kelapa atau lebih dikenal Gula Jawa adalah gula yang dibuat dari bahan nira kelapa.[1] Untuk membuat gula kelapa, nira kelapa disaring terlebih dahulu, kemudian dididihkan.[1] Gula kelapa tidak dapat digantikan oleh gula lain dalam resep, sebab gula tersebut memiliki kekhasan aroma, mineral, dan rasa.[2] Rujukan ^ a b Gula Kelapa. Pemerintah Kabupaten Purworejo. Diarsipkan dari versi asli tanggal...

 

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

Church in AustraliaSt Patrick's Church, Mount PerrySt Patricks Church, 200925°10′47″S 151°38′32″E / 25.1798°S 151.6421°E / -25.1798; 151.6421Address18 Pearson Street, Mount Perry, North Burnett Region, QueenslandCountryAustraliaDenominationRoman CatholicWebsitewww.childerscatholic.netHistoryStatusChurchConsecrated12 February 1905 (1905-02-12)ArchitectureArchitect(s)F H FairclothArchitectural typeChurchStyleGothic RevivalCompleted1904Specific...

ヨハネス12世 第130代 ローマ教皇 教皇就任 955年12月16日教皇離任 964年5月14日先代 アガペトゥス2世次代 レオ8世個人情報出生 937年スポレート公国(中部イタリア)スポレート死去 964年5月14日 教皇領、ローマ原国籍 スポレート公国親 父アルベリーコ2世(スポレート公)、母アルダその他のヨハネステンプレートを表示 ヨハネス12世(Ioannes XII、937年 - 964年5月14日)は、ロ...

 

19th-century genocide in the Caucasus Circassian genocidePart of the Russo-Circassian WarPainting depicting Circassians trying to evacuate their town in order to avoid being massacredCircassian population remaining in Circassia after the genocide. After the genocide, only those forced into exile, hiding in marshes and caves, and, in rare cases, who could make agreements with the Russians, survived.Native nameUbykh: ЦӀыцӀэкӀунLocationCircassia under Russian invasionDate1863–18...

 

Yang MuliaAdrianus DjajasepoetraS.J.Uskup Agung Emeritus DjakartaGerejaGereja Katolik RomaKeuskupan agungDjakartaPenunjukan18 Februari 1953[1](58 tahun, 343 hari)Masa jabatan berakhir21 Mei 1970 (76 tahun, 70 hari)PendahuluPetrus Johannes WillekensPenerusLeo Soekoto, SJJabatan lainUskup Agung Tituler Volsinium (1970–1976)ImamatTahbisan imam15 Agustus 1928[1](34 tahun, 156 hari)Tahbisan uskup23 April 1953oleh Georges de Jonghe d'Ardoye, M.E....

Australian cyclist (born 1972) Robbie McEwenMcEwen at the 2013 Tour Down UnderPersonal informationFull nameRobert McEwenNicknameRocket RobbieBorn (1972-06-24) 24 June 1972 (age 52)Brisbane, AustraliaHeight1.71 m (5 ft 7+1⁄2 in)Weight70 kg (154 lb; 11 st 0 lb)Team informationCurrent teamRetiredDisciplineRoadRoleRiderRider typeSprinterProfessional teams1996–1999Rabobank2000–2001Domo–Farm Frites2002–2008Lotto–Adecco2009–201...

 

Behavior characterized by activity during the night and sleeping during the day This article is about the animal behavior of nocturnality. For other uses, see Nocturnal (disambiguation). Nocturnal animals redirects here. For the film directed by Tom Ford, see Nocturnal Animals. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Nocturnality ...

 

Hard, coarse-grained, siliceous sandstone The Salt Cellar, a gritstone tor on Derwent Edge in the Peak District, England Gritstone or grit is a hard, coarse-grained, siliceous sandstone. This term is especially applied to such sandstones that are quarried for building material. British gritstone was used for millstones to mill flour, to grind wood into pulp for paper and for grindstones to sharpen blades. Grit is often applied to sandstones composed of angular sand grains. It may commonly con...

2024 death protesting Israel's invasion of Gaza Self-immolation of Aaron BushnellPart of the Israel–Hamas war protests in the United StatesBushnell on fire in front of the Israeli embassyDateFebruary 25, 2024 (2024-02-25)LocationWashington, D.C., United StatesCoordinates38°56′32.9″N 77°04′04.4″W / 38.942472°N 77.067889°W / 38.942472; -77.067889TypeSelf-immolationMotiveOpposition to United States support for the alleged Palestinian genocideD...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (ديسمبر 2019) ود رملي تعديل مصدري - تعديل   ود رملي قرية سودانية تقع في ولاية الخرطوم تبعد حوالي 65 كم من مدينة الخرطوم، شمال الخرطوم بحري.[1] المجموعات السكانية تقطن �...

 

艾爾登法環エルデンリングElden Ring类型動作角色扮演平台Microsoft WindowsSteamPlayStation 4Xbox OnePlayStation 5Xbox Series X/S开发商FromSoftware发行商全球:萬代南夢宮娛樂日本:FromSoftware总监宮崎英高谷村唯制作人北尾泰大[1]编剧喬治·R·R·馬丁宮崎英高音乐齋藤司北村友香宮澤翔衣富澤泰工藤吉三模式單人遊戲、多人游戏发行日2022年2月25日 《艾尔登法环》(日语:エルデンリン�...

Not to be confused with The Republicans (France). Political party in France Republican Party Parti RépublicainLeaderValéry Giscard d'EstaingPresidentJean-Pierre SoissonJacques BlancGérard LonguetFrançois LéotardFounderValéry Giscard d'EstaingFounded20 May 1977Dissolved24 June 1997Preceded byIndependent Republicans[1]Succeeded byLiberal Democracy[1]IdeologyLiberal conservatism[2]Pro-EuropeanismPolitical positionCentre-rightNational affiliationUn...

 

Patinage artistique aux Jeux olympiques de 1988 Généralités Sport Patinage artistique Organisateur(s) CIO et ISU Édition 17e Lieu(x) Calgary Date du 14 au 27 février 1988 Nations 26 Participants 129 (63 hommes et 66 femmes) Épreuves 4 Site(s) Olympic Saddledome et Stampede Corral Palmarès Plus titré(s) Union soviétique (2) Plus médaillés Union soviétique (5) Navigation Sarajevo 1984 Albertville 1992 modifier Les épreuves de patinage artistique aux Jeux olympiques d'hiver de 1988...