Контрактное программирование

Контрактное программирование (design by contract (DbC), programming by contract, contract-based programming) — это метод проектирования программного обеспечения. Он предполагает, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. При этом, кроме обычного определения абстрактных типов данных, также используются предусловия, постусловия и инварианты. Данные спецификации называются «контрактами» в соответствии с концептуальной метафорой условий и ответственности в гражданско-правовых договорах.

История

Термин предложил Бертран Мейер в связи с разработкой языка Eiffel. Контрактное программирование выросло из формальной верификации, формальной спецификации и логики Хоара. Контрактное программирование — это не только простая метафора, указывающая способ проектирования. Условия, облегчающие применение контрактного программирования:

Описание

Основная идея контрактного программирования — это модель взаимодействия элементов программной системы, основывающаяся на идее взаимных обязательств и преимуществ. Как и в бизнесе, клиент и поставщик действуют в соответствии с определённым контрактом. Контракт некоторого метода или функции может включать в себя:

  • конкретные обязательства, которые любой клиентский модуль должен выполнить перед вызовом метода — предусловия, которые дают преимущество для поставщика — он может не проверять выполнение предусловий;
  • конкретные свойства, которые должны присутствовать после выполнения метода — постусловия, которые входят в обязательства поставщика;
  • обязательства по выполнению конкретных свойств — инвариантов, которые должны выполняться при получении поставщиком сообщения, а также при выходе из метода.

Многие языки программирования позволяют учитывать такие обязательства. Контрактное программирование подразумевает эти требования критическими для корректности программ, поэтому они должны быть утверждены при проектировании. Таким образом, контрактное программирование предписывает начинать писать код с написания формальных утверждений корректности (assertions).

В объектно-ориентированном программировании контракт метода обычно включает следующую информацию:

  • возможные типы входных данных и их значение;
  • типы возвращаемых данных и их значение;
  • условия возникновения исключений, их типы и значения;
  • присутствие побочного эффекта метода;
  • предусловия, которые могут быть ослаблены (но не усилены) в подклассах;
  • постусловия, которые могут быть усилены (но не ослаблены) в подклассах;
  • инварианты, которые могут быть усилены (но не ослаблены) в подклассах;
  • (иногда) гарантии производительности, например, временная сложность или сложность по памяти.

При использовании контрактов сам код не обязан проверять их выполнение. Обычно в таких случаях в коде делают жёсткое падение[уточнить]fail-fast»), таким образом облегчая отладку выполнения контрактов. Во многих языках, таких как C, C++, Delphi, PHP, такое поведение реализуется оператором assert. В конечном варианте кода это поведение может быть сохранено, либо проверки могут быть убраны чтобы повысить производительность.

Юнит-тесты проверяют модуль изолированно от других, проверяя, что модуль удовлетворяет предположениям контракта, а также свои контракты выполняют используемые им модули. Интеграционные тесты проверяют, что модули работают корректно вместе.

Контрактное программирование может повысить уровень повторного использования кода, поскольку обязательства модуля чётко документированы. Вообще, контракт модуля можно рассматривать также как способ документации программного обеспечения.

Реализация в языках программирования

Поддержка DbC на языковом уровне

Языки, изначально поддерживающие средства для контрактного программирования:

Поддержка DbC с помощью сторонних библиотек

Общие инструменты

Примечания

  1. Walter, Bright D Programming Language, Contract Programming. Digital Mars (1 ноября 2014). Дата обращения: 1 декабря 2014. Архивировано 28 ноября 2014 года.
  2. Scala Standard Library Docs - Assertions. EPFL. Дата обращения: 12 января 2020. Архивировано 25 декабря 2019 года.
  3. David Morgan, Andreas Leitner and Nhat Minh Le. Contracts for Java (англ.) (4 февраля 2011). Дата обращения: 12 июня 2011. Архивировано 21 марта 2012 года.
  4. GitHub - nrc/libhoare: Design by contract style assertions for Rust. Дата обращения: 24 февраля 2019. Архивировано 12 октября 2018 года.

См. также

Read other articles:

Disambiguazione – Se stai cercando nel diritto internazionale, vedi Consuetudine (diritto internazionale). Questa voce o sezione sull'argomento diritto è ritenuta da controllare. Motivo: verificare se sia la stessa cosa di Usi e consuetudini ed eventualmente unire. Altrimenti spiegare le differenze Partecipa alla discussione e/o correggi la voce. Segui i suggerimenti del progetto di riferimento. Questa pagina sull'argomento diritto sembra trattare argomenti unificabili alla pagi...

 

 

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Fakultas Farmasi Universitas Gadjah Mada – berita · surat kabar · buku · cendekiawan · JSTOR Fakultas FarmasiUniversitas Gadjah MadaLogo Universitas Gadjah MadaJenisPerguruan Tinggi Negeri Badan HukumDid...

 

 

PassengersPoster bioskopSutradaraMorten TyldumProduser Neal H. Moritz Stephen Hamel Michael Maher Ori Marmur Ditulis olehJon SpaihtsPemeran Jennifer Lawrence Chris Pratt Michael Sheen Laurence Fishburne Andy García Penata musikThomas NewmanSinematograferRodrigo PrietoPenyuntingMaryann BrandonPerusahaanproduksi LStar Capital Village Roadshow Pictures Wanda Pictures Original Film Company Films Start Motion Pictures DistributorColumbia PicturesTanggal rilis 14 Desember 2016 (2016-12-...

Woody AllenWoody Allen pada konser diNew York City, 2006LahirAllan Stewart KonigsbergTahun aktif1950 - PresentSuami/istriHarlene Rosen (1956-1962) Louise Lasser (1966-1969) Soon-Yi Previn (1997-)Anak5; including Ronan Seamus Farrow Woody Allen (lahir 30 November 1935 terlahir dengan nama Allen Stewart Konigsberg) adalah seorang aktor, sutradara film, penulis, musikus (Klarinet), dan pelawak asal Amerika Serikat. Allen adalah salah seorang sutradara paling berpengaruh pada zaman modern b...

 

 

For other uses, see Alumni Stadium (disambiguation).Foster Stadium redirects here. For the baseball stadium in San Angelo, Texas, see Foster Field.Alumni Memorial Field at Foster StadiumAlumni Memorial FieldLocationNorth Main StreetLexington, Virginia 24450Coordinates37°47′20″N 79°26′6″W / 37.78889°N 79.43500°W / 37.78889; -79.43500OwnerVirginia Military InstituteOperatorVirginia Military InstituteCapacity10,000SurfaceBermuda GrassConstructionOpened1962Reno...

 

 

Pour un article plus général, voir Water-polo aux Jeux olympiques. Water-polo aux Jeux olympiques d'été de 1992 Généralités Sport Water-polo Organisateur(s) CIO Édition 21e Lieu(x) Barcelone, Espagne Date du 1er au 9 août 1992 Participants 12 (156 joueurs) Matchs joués 42 Site(s) Piscine municipale de MontjuïcPiscine Bernat Picornell Palmarès Tenant du titre Yougoslavie Vainqueur Italie Deuxième Espagne Troisième Équipe unifiée Buts 758 buts (18 par match) Navigation Séoul 1...

Stasiun KA Paldiski pada tahun 2011 Paldiski ialah sebuah kota pelabuhan di pesisir Laut Baltik dan Teluk Finlandia. Kota ini terletak di kawasan administratif Harjumaa, Estonia. Di kota ini terdapat sebuah institut kelautan. Awalnya kota ini didirikan oleh bangsa Swedia dengan nama Rågervik, lalu pada masa Kekaisaran Rusia menjadi pelabuhan bernama Балтийский Порт – Baltiyskiy Port (Pelabuhan Baltik). Sejak tahun 1933, kota ini bernama Paldiski. Wikimedia Commons memiliki me...

 

 

1966 United States Senate election in Tennessee ← 1964 (special) November 8, 1966 1972 →   Nominee Howard Baker Frank G. Clement Party Republican Democratic Popular vote 483,063 383,843 Percentage 55.72% 44.27% County resultsBaker:      50–60%      60–70%      70–80%      80–90%Clement:      50–60%      ...

 

 

1962 filmThe Story of Joseph and His BrethrenDirected byIrving Rapper (English version)Luciano Ricci (Italian version)Written byOreste Biancoli (Italian version)Ennio de Concini (Italian version)Guy Elmes (English version)Guglielmo Santangelo (screenplay)Guglielmo Santangelo (story)Produced byLuigi CarpentieriErmanno DonatiNarrated byTerence HillCarlo GiustiniFinlay CurrieMusic byMario NascimbeneProductioncompaniesCosmopolis FilmErmanno DonatiLuigi CarpentieriJolly FilmDistributed byColorama...

Zenit-3SL adalah roket pembawa expendable (sekali pakai) dioperasikan oleh Sea Launch. Pertama diterbangkan pada tahun 1999,[1] telah diluncurkan 35 kali, dengan tiga kegagalan dan satu kegagalan parsial. Ini adalah anggota dari keluarga roket Zenit, dan dibangun oleh Biro Desain Yuzhnoye. RKK Energia menghasilkan Blok tahap atas DM-SL, sementara fairing payload diproduksi oleh Boeing.[2] Peluncuran dilakukan dari platform Ocean Odyssey berlabuh di khatulistiwa Samudra Pasifi...

 

 

For the audiobook player, see Playaway § Wonderbook. 2012 video gameWonderbookDeveloper(s)London StudioPublisher(s)SCEEPlatform(s)PlayStation 3ReleaseNA: 13 November 2012AU: 15 November 2012EU: 16 November 2012JP: 7 November 2013Genre(s)Gaming Wonderbook is an augmented reality peripheral for the PlayStation 3 console. The user holds a physical book-like object and the software displays content on the television's screen. Development Wonderbook is an augmented reality book which is desi...

 

 

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6]...

Overview of tourism in the Indian state of Uttar Pradesh Ram ki Paidi ghat in Ayodhya, Uttar Pradesh, India Taj Mahal, one of the most famous tourist destinations in Uttar Pradesh and India. The famous depiction of Mount Meru at Jambudweep (mythological), in Uttar Pradesh. Prem mandir from main gate in Vrindavan, Mathura, India Situated in the northern part of India, bordering with the capital of India New Delhi, Uttar Pradesh is one of the most popular and an established tourist destination ...

 

 

During World War II, the entertainment industry changed to help the war effort. Often the industry became more closely controlled by national governments, who believed that a supportive home front was crucial to victory. Through regulation and censorship, governments sought to keep spirits high and to depict the war in a positive light. They also found new ways to use entertainment media to keep citizens informed. Government censorship of mass media was enforced because of fears of threats t...

 

 

Unproven performance-enhancing device A Power Balance branded hologram bracelet This article is part of a series onAlternative medicine General information Alternative medicine History Terminology Alternative veterinary medicine Quackery (health fraud) Rise of modern medicine Pseudoscience Antiscience Skepticism Scientific Therapeutic nihilism Fringe medicine and science Acupressure Acupuncture Alkaline diet Anthroposophic medicine Apitherapy Applied kinesiology Aromatherapy Association for R...

Tournoi Clausura2015 Généralités Sport Football Organisateur(s) FENAFUTH Édition 33e Lieu(x) Honduras Date du 17 janvier 2015 au 24 mai 2015 Participants 10 équipes Matchs joués 100 Hiérarchie Hiérarchie 1er échelon Niveau inférieur Liga Nacional de Ascenso Palmarès Tenant du titre CD Motagua Vainqueur CD Olimpia Deuxième CD Motagua Relégué(s) Parrillas One (en) Navigation Saison précédente Saison suivante modifier Le Tournoi Clausura 2015 est le trente-cinquième t...

 

 

1978 musical by Bob Fosse For the Guy song, see Dancin' (Guy song). For other uses, see Dancing (disambiguation). Dancin'Original Broadway Production PosterMusicVariousLyricsVariousProductions1978 Broadway 2023 Broadway Dancin' is a musical revue created, directed, and choreographed by Bob Fosse and originally produced on Broadway in 1978. The plotless, dance-driven revue is a tribute to the art of dance, and the music is a collection of mostly American songs, many with a dance theme, fro...

 

 

  لمعانٍ أخرى، طالع ناصر (توضيح). ناصر الجديدة غرب أسيوط ناصر الجديدة (مدينة)شعار سميت باسم جمال عبد الناصر  تاريخ التأسيس 2017 (منذ 7 سنوات) تقسيم إداري البلد  مصر المحافظة محافظة أسيوط المسؤولون رئيس جهاز المدينة ياسر عبد الله[1] خصائص جغرافية إحداثيات 27°04′25″N 31...

2013 German federal election ← 2009 22 September 2013 (2013-09-22) 2017 → ← outgoing memberselected members →All 631 seats in the Bundestag, including 33 overhang and leveling seats316 seats needed for a majorityOpinion pollsRegistered61,946,900 0.4%Turnout44,309,925 (71.5%) 0.7pp   First party Second party Third party   Candidate Angela Merkel Peer Steinbrück Gregor Gysi[a] Party CDU/CSU SPD Left Last el...

 

 

Pour les articles homonymes, voir Fredericks (homonymie). Carole Fredericks Carole Fredericks à Dijon en 1996.Informations générales Nom de naissance Carole Denise Fredericks Naissance 5 juin 1952Springfield, Massachusetts États-Unis Décès 7 juin 2001 (à 49 ans)Dakar, Sénégal Activité principale Chanteuse Genre musical Variété, Pop, Pop-Rock, Blues, Gospel Instruments Chant modifier Carole Fredericks, née le 5 juin 1952 à Springfield (Massachusetts), et morte le 7 juin 200...