Programação por contrato

Programação por contrato do inglês Design by contract (DbC) é um abordagem de desenvolvimento de software que prescreve que os desenvolvedores devem definir métodos formais, especificações de interface precisas e verificáveis dos componentes de desenvolvimento de software, que acarreta na definição de Tipo Abstrato de Dados com pre-condições, pos-condições e constantes. Estas especificações são definidas como um "contrato", de acordo com os próprios conceitos de condições e obrigações dos contratos de negócio.

Devido o termo Design by Contract ser marca registrada da Eiffel Software nos EUA, muitos desenvolvedores se referem à abordagem como Programação por Contrato (Programming by contract).

História

O termo foi registrado por Bertrand Meyer em união com a linguagem de programação Eiffel e descreveu inicialmente em vários artigos em 1986[1][2][3] e 2 edições sucessivas (1988, 1997) de seu livro Object-Oriented Software Construction. Eiffel Software atribuiu o registro da marca Design by Contract em Dezembro de 2003, e a obteve em Dezembro de 2004.[4][5] O atual detentor destes termos é a Eiffel Software.[6][7]

Programação por Contrato tem suas raízes em Verificação Formal, Especificação Formal e Lógica Hoare. As contribuições originais incluem:

Descrição

A ideia Central do DbC é a metáfora onde como os elementos de um software colaboram entre si, baseando-se em obrigações e benefícios mútuos. A metáfora vem do mundo dos negócios, onde um "cliente" e um "Fornecedor" acordam sobre um "contrato" que define por exemplo:

  • O fornecedor deve prover um determinado produto(obrigação) e fica entendido que o cliente tenha pago por isto (benefício).
  • O cliente deve pagar o valor (obrigação) e é garantido a obter o produto (benefício).
  • Ambas partes satisfazem suas obrigações, através de leis e regulamentações, aplicadas a todos os contratos.

Similarmente, se a rotina de uma Classe em Programação Orientada a objetos provê uma certa funcionalidade, isto deve :

  • Aguardar uma certa condição para garantir que uma informação no módulo de clientes o chame: a pré-condição da rotina — uma obrigação para o cliente, e o benefício do fornecedor (a rotina em si), eliminando casos de executar por outros meios.
  • Garantir uma certa condição de saída: A pós-condição da rotina — uma obrigação do fornecedor, e obviamente um benefício (o maior benefício de chamar a rotina) para o cliente.
  • Manter uma determinada propriedade, assumida na entrada e garantida na saída: uma Classe Constante.

O contrato é a formalização destas obrigações e benefícios. É possível resumir Programação por contrato através de "3 perguntas" que um designer deve-se fazer constantemente:

  • O que isto prevê?
  • O que isto garante?
  • O que isto mantém?

Muitas linguagens de programação possuem facilidades em fazer asserções como estas. Contudo, o DbC considera estes contratos cruciais para as correções do software, que deve ser parte do processo de design. De fato, DbC defende a escrita de asserções inicialmente.

A noção de contrato se estende aos níveis de métodos e procedimentos; o contrato de cada método irá normalmente conter as seguintes "clausulas":

Subclasses em uma hierarquia de herança são permitidas para facilitar pre-condições (e não reforçá-las) e reforçar portanto pós-condições e constantes (porém, não ignorá-las). Estas regras facilitam a utilização de subclasses.

Todos os relacionamentos entre Cliente e Fornecedor estão entre as classes. A classe Cliente é obrigada a fazer chamadas às funcionalidades dos Fornecedores de forma que o estado do Fornecedor não seja violado. Consequentemente, o Fornecedor é obrigado a fornecer um estado de retorno e dados que garantam que nada foi violado. Instanciando-se, pode ser necessário que os dados do Fornecedor estejam em buffer no momento da solicitação de deleção. Desta forma, o Fornecedor garante ao Cliente que a exclusão conclua este trabalho, a informação vai, de fato, ser apagada do registro. Outros conceitos de DbC são "Classe constante". A classe constante garante (para a classe local) que o estado da classe será mantido dentro de tolerâncias especificadas no fim de cada execução de funcionalidade.

Quando se utiliza contrato, para um Fornecedor que esquecer de verificar se as condições de um contrato são satisfeitas; a ideia em geral é que o código "falhe bruscamente", mantendo o contrato em uma rede segura. A propriedade de "Falhar bruscamente" dos DbC's simplifica a depuração do comportamento do contrato como a intenção de cada rotina deve ser claramente especificada. Isto é conhecido como uma prática relacionada conhecida como programação defensiva, onde o Fornecedor é responsável por identificar quando uma pré-condição foi quebrada. Mais normal do que se imagina, O fornecedor controla uma exceção para informar o cliente que uma precondição foi quebrada, e nos 2 casos - DbC e programação defensiva - o cliente deve identificar como lidar com a situação. O DbC torna o trabalho do fornecedor mais simples.

DbC define também critérios de correção para um módulo do software:

  • Se a classe constante E a precondição são verdadeiras antes do fornecedor ser chamado pelo cliente, então a constante e a pós-condição serão verdadeiras após o serviço ser concluído.
  • Fazendo uma chamada para um fornecedor, o módulo do software não pode violar as pré-condições da classe em questão (Fornecedor).

Devido as condições do contrato não poderem ser violadas durante a execução do programa, eles podem tanto serem deixados num código de depuração ou removidos na versão de produção por questão de performance.

O reúso também é facilitado pela aplicação do DbC, desde que o contrato de cada parte do código for completamente documentado. O contrato de um módulo pode ser definido através de uma documentação de software conforme o comportamento de cada módulo.

Relação com o teste de Software

Teste unitário testa um módulo isoladamente, para certificar que está se assumindo as cláusulas do contrato e subcontratos usados no caso de uso. Teste de integração avalia se os módulos estão operando normalmente quando em conjunto.

Suporte de linguagem

Linguagens com suporte nativo

Dentre as linguagens que implementam a maioria das funcionalidades do DbC estão:

Linguagens com suporte de terceiros

Várias bibliotecas, pre-processos e outras ferramentas estão sendo desenvolvidas para as linguagens de programação sem o suporte nativo à DbC:

Ferramentas em Geral

Consulte Também

Bibliografia

  1. Meyer, Bertrand: Design by Contract, Technical Report TR-EI-12/CO, Interactive Software Engineering Inc., 1986
  2. Meyer, Bertrand: Design by Contract, em Advances in Object-Oriented Software Engineering, eds. D. Mandrioli and B. Meyer, Prentice Hall, 1991, pp. 1-50
  3. Meyer, Bertrand: Applying "Design by Contract", in Computer (IEEE), 25, 10, October 1992, pages 40-51, também disponível em online
  4. United States Patent and Trademark Office registration for "DESIGN BY CONTRACT"
  5. United States Patent and Trademark Office registration for the graphic design with words "Design by Contract"
  6. Current status of United States Patent and Trademark Office registration for "DESIGN BY CONTRACT"
  7. Current status of United States Patent and Trademark Office registration for the graphic design with words "Design by Contract"
  8. Bright, Walter (20 de agosto de 2006). «D Programming Language, Contract Programming». Digital Mars. Consultado em 6 de outubro de 2006 
  • Mitchell, Richard, and McKim, Jim: Design by Contract: by example, Addison-Wesley, 2002
  • A wikibook describing DBC closely to the original model.

Ligações externas

Read other articles:

December to RememberPosterGenre Drama Roman SkenarioJoko NugrohoSutradaraJoko NugrohoPemeran Fay Nabila Rafi Sanjaya Zivana Questa Afisah Gissele Salsa Meidya Putri Fariha Abimanya Hesti Lauder Axiz Pranoto Putri Negara asalIndonesiaBahasa asliBahasa IndonesiaJmlh. episode6ProduksiProduser eksekutifGani SubrataProduserAris MudaSinematografiWawan BPenyunting Pahmee R. Thomson Rumah produksiSinemata ProductionsRilis asliJaringanGenflixRilis24 Desember 2021 (2021-12-24) –2 Januari 2...

 

Radio station in Fossil, OregonKFSL-LPFossil, Oregon[1]Broadcast areaMetro Fossil[2]Frequency99.5 FM MHzBranding99.5 KFSLProgrammingFormatClassic Country[3]OwnershipOwnerWheeler County Broadcasters Association[1]HistoryFirst air dateJune 14, 2005[4]Former call signsKFSL-LP (2003-Present)[5]Call sign meaningK FoSsiLTechnical informationFacility ID134334ClassL1Power100 WattsHAAT−84.9 meters (−279 ft)[1]Transmitter coordinates45°0...

 

Salmo Periode 23–0 jtyl PreЄ Є O S D C P T J K Pg N Miocene hingga kini[1] Salmo salarSalmo truttaTaksonomiKerajaanAnimaliaFilumChordataKelasActinopteriOrdoSalmoniformesFamiliSalmonidaeGenusSalmo Linnaeus, 1758 Tata namaSinonim taksonTrutta (en) lbs Salmo adalah genus ikan dalam famili salmon (Salmonidae) yang mencakup spesies salmon dan trout Eropa, di antaranya salar salmon Salmo Atlantik yang cukup dikenal dan trout coklat Salmo trutta. Spesies Spesies yang saat ini terdaf...

Disambiguazione – Se stai cercando altri significati, vedi Arkansas (disambigua). Questa voce o sezione sull'argomento Arkansas non cita le fonti necessarie o quelle presenti sono insufficienti. Commento: Solo due note di conto Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Arkansasstato federato(EN) State of Arkansas (dettagli) LocalizzazioneStato Stati Uniti AmministrazioneCapoluogoLittle Rock GovernatoreSarah...

 

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: Buenaventura Province – news · newspapers · books · scholar · JSTOR (September 2023) (Learn how and when to remove this template message) 1855 Buenaventura Province was one of the provinces of Gran Colombia. It belonged to the Cauca Department which was created...

 

  لمعانٍ أخرى، طالع ليندن (توضيح). ليندن    شعار   الإحداثيات 50°32′00″N 8°39′00″E / 50.533333333333°N 8.65°E / 50.533333333333; 8.65   [1] تاريخ التأسيس 1977  تقسيم إداري  البلد ألمانيا[2]  خصائص جغرافية  المساحة 22.77 كيلومتر مربع (31 ديسمبر 2017)[3][4]  ا�...

Derek TalbotWolfgang Bochow (kiri) bermain melawan Derek Talbot dari Inggris (kanan).Informasi pribadiKebangsaanInggrisLahir23 Maret 1947 (umur 77)[1]Newcastle, Kota Tyne dan Wear, Inggris Rekam medali Bulutangkis Mewakili  Inggris Kejuaraan Dunia Malmö 1977 Ganda campuran Piala Dunia Tokyo 1979 Ganda putra Pesta Olahraga Persemakmuran 1974 Christchurch Men's doubles 1970 Edinburgh Mixed doubles 1974 Christchurch Mixed doubles 1978 Edmonton Mixed team 1978 Edmonton Men's s...

 

Serangan Wisma BrécourtBagian dari Pendaratan Pasukan Lintas Udara Amerika di NormandiaBrécourt Manor, tahun 2010.Tanggal6 Juni 1944Lokasi49°23′17.0″N 1°13′34.0″W / 49.388056°N 1.226111°W / 49.388056; -1.226111Koordinat: 49°23′17.0″N 1°13′34.0″W / 49.388056°N 1.226111°W / 49.388056; -1.226111Le Grand Chemin, FranceHasil Kemenangan taktis SekutuPihak terlibat  Amerika Serikat  JermanTokoh dan pemimpin Richard W...

 

Roman Catholic church in Rapovce Location of Lučenec District in the Banská Bystrica Region Rapovce (Hungarian: Rapp) is a village and municipality in the Lučenec District in the Banská Bystrica Region of Slovakia. External links http://www.statistics.sk/mosmis/eng/run.html Wikimedia Commons has media related to Rapovce. vteMunicipalities of Lučenec District Lučenec Fiľakovo Ábelová Belina Biskupice Boľkovce Budiná Bulhary Buzitka Čakanovce Čamovce Divín Dobroč Fiľakovské Kov...

Marco Borriello Borriello con la maglia del Genoa nel 2008 Nazionalità  Italia Altezza 185[1] cm Peso 85[1] kg Calcio Ruolo Attaccante Termine carriera 30 gennaio 2019 CarrieraSquadre di club1 2000-2001 Treviso0 (0)2001→  Triestina13 (2)2001-2002 Treviso29 (10)2002-2003 Milan3 (0)2003→  Empoli12 (1)2003-2004 Milan4 (0)2004-2005→  Reggina30 (2)2005-2006→  Sampdoria11 (2)2006→  Treviso20 (5)2006-2007 Milan9 (1)20...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

Italian football club Not to be confused with F.S. Sestrese Calcio 1919 or A.S. Sestese Calcio. Football clubSesteseFull nameUnione Sportiva Sestese CalcioFounded1913GroundStadio Alfredo Milano,Sesto Calende, ItalyChairmanAlberto BrovelliManagerGiorgio DossenaLeagueEccellenza Lombardy/A2020–21Eccellenza Lombardy/A, 8th Home colours Away colours Unione Sportiva Sestese Calcio is an Italian association football club located in Sesto Calende, Lombardy. It currently plays in Eccellenza Lombardy...

Військово-музичне управління Збройних сил України Тип військове формуванняЗасновано 1992Країна  Україна Емблема управління Військово-музичне управління Збройних сил України — структурний підрозділ Генерального штабу Збройних сил України призначений для планува...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Maret 2016. SMP Negeri 4 BanjarmasinInformasiNomor Pokok Sekolah Nasional30304203Kepala SekolahH. Ahmad Riyadi, S.Pd, M.PdJumlah kelas31 KelasRentang kelasVII, VIII, IXKurikulumKurikulum 2013AlamatLokasiJl. Teluk Tiram Darat No.1, Teluk Tiram, Banjarmasin,...

 

Return to Forever (album) redirects here. For the Scorpions album, see Return to Forever (Scorpions album). 1972 studio album by Chick CoreaReturn to ForeverStudio album by Chick CoreaReleasedSeptember 1972 (Germany, Japan)1975 (US)RecordedFebruary 2–3, 1972StudioA & R StudiosNew York CityGenreJazz fusionLength46:48LabelECMECM 1022 STProducerManfred EicherChick Corea chronology Piano Improvisations Vol. 2(1972) Return to Forever(1972) Light as a Feather(1973) Return to Forever c...

FIA rally car formula Group Rally1Motor racing formulaCategoryRallyingCountry/RegionInternationalChampionshipsWRCInaugural2022DrivetrainFour Wheel DrivePower to weight3.1 kg/hpAptitudeElite World RallyChampionship   Current season 2024 World Rally Championship 2024 WRC2 Championship 2024 WRC3 Championship 2024 Junior WRC Championship Support categories Current: WRC2 WRC3 Junior WRC Former: PWRC SWRC FIA 2-Litre Current car classes Rally1 Rally2 Rally3 Rally4 Rally5 Related lists Drivers ...

 

Cadillac Motor Car DivisionJenisDivisi mewah dari GMIndustriMobilDidirikan1902KantorpusatDetroit, MichiganTokohkunciHenry M. LelandProdukMobil mewahIndukGeneral Motors (1909-sekarang)Situs webwww.cadillac.com Cadillac adalah sebuah perusahaan mobil Amerika Serikat, didirikan tahun 1902 oleh Henry M. Leland. Perusahaan ini merupakan bagian dari General Motors sejak tahun 1909. Markasnya berada di Detroit, Michigan. Slogan Cadillac pada saat ini adalah Life. Liberty. And The Pursuit., yang meru...

 

此條目需要补充更多来源。 (2013年2月5日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:愛,川流不息 — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 愛,川流不息类型真實人生劇場编剧劉肖蘭导演林博生主演參見演員列表制�...

Jaime Garzón Mural tributo a Jaime en la Universidad del Valle. Alcalde Menor de Sumapaz 20 de julio de 1988-20 de marzo de 1989Alcalde Andrés Pastrana Arango Información personalNacimiento 24 de octubre de 1960 Bogotá, ColombiaFallecimiento 13 de agosto de 1999 (38 años) Bogotá, ColombiaCausa de muerte Herida por arma de fuegoSepultura Jardines de Paz Nacionalidad ColombianaFamiliaPadres Félix María Garzón Cubillos Ana Daisy Forero PortellaFamiliares Jorge, Alfredo, Marisol Gar...

 

Propulsion system for marine vessels utilizing a nuclear powerplant When the nuclear-powered Arktika class 50 Let Pobedy was put into service in 2007, it became the world's largest icebreaker. Nuclear marine propulsion is propulsion of a ship or submarine with heat provided by a nuclear reactor. The power plant heats water to produce steam for a turbine used to turn the ship's propeller through a gearbox or through an electric generator and motor. Nuclear propulsion is used primarily within n...