Másol-beillesztéses programozás

A másol-beillesztéses programozás a számítógép-programozásban azt jelenti, hogy ismétlődő kódot állítanak elő másolással. Mivel gyakran a tapasztalat hiányát jelzi, használata pejoratív. Lehet a technológiai korlátok következménye is, amit egyébként könyvtárakkal vagy függvényekkel oldanának meg. Azonban van, amikor alkalmazása megengedhető, mint boilerplate kód, ciklus kifejtése (ha a fordító nem támogatja), de támogatják bizonyos idiómák, forráskód-szerkesztők kódrészletek formájában.

Okai

A másolást gyakran tapasztalatlan programozók végzik, akiknek nehéz lenne saját kód írása és nem ismernek függvénykönyvtárakat a feladat megoldására. Emiatt keresnek valahol egy létező megoldást, amit saját megoldásukhoz felhasználhatnak. Néha több helyről gyűjtik össze a szükséges részleteket.[1] (Lásd még: Cargo cult programozás)

Gyakran nem értik eléggé a kimásolt kódot, emiatt problémáik inkább a tapasztalatlanságból mint a másolásból származnak. A kód különböző helyről származhat, könyvekből, elektronikus jegyzetekből, internetes fórumokból, oktatóktól, barátoktól, munkatársaktól. Az eredmény stílusa nem egységes, és tartalmazhat olyan kódrészleteket is, amelyekre az új helyen már nincs szükség. További probléma a kód nem értéséből fakadó hibák, amiket újabb másolással igyekszik a programozó kijavítani. Előfordul, hogy nem nevezi át a kódban szereplő változókat, osztályokat, függvényeket, így azok neve nem lesz informatív az új környezetben.[1]

A másolásos programozás lehet annak is a következménye, hogy a kezdő programozó nem ismeri eléggé az adott paradigma programozási elemeit, mint ciklusok, függvények és szubrutinok.

Duplikáció

Könyvtári kód

Ismétlődő kódszakasz kiemelése függvénybe

Tapasztaltabb programozók is másolnak néha, már meglevő, kipróbált kódszakaszokat vesznek át saját könyvtárukból, és generikus algoritmusokat alkalmaznak a jelenlegi helyzetre, de nem kívánják a teljes könyvtárat beépíteni a projektbe, például terjedelmi okokból.[2]

A másolással létrehozott kód is duplikáció, emiatt osztozik annak problémáiban. Nincs kapcsolat a különböző példányok között, emiatt a karbantartó időt veszít vagy a többi példány keresésére vagy az egyenkénti kijavításra. Kommentben jelezhető a kapcsolat, de mivel korlátozottan tartják karban a kommenteket, azért ez elavulhat.[3]

Az objektumorientált programozásban igyekeznek minél absztraktabbá és általánosabbá tenni a másolást, ha mégis sor kerülne rá. Így javasolják, hogy a generikus algoritmus osztályba ágyazását, ami újrahasználható. Az öröklődés és a túlterhelés segítségével a hívó kód ahelyett, hogy átvenné és megváltoztatná a kódot, csak meghívja, esetleg előtte vagy utána csinál még valamit. Ha további funkcionalitás szükséges, akkor az osztály illetve könyvtár bővíthető. Ha valami probléma adódik, akkor elég egy helyen javítani.[4]

Elágazás

A nagy csapatokban végzett fejlesztés támogatására elágaztatják a kódot. A példányokon párhuzamosan lehet dolgozni, amivel lerövidíthető a fejlesztési ciklus. A klasszikus elágaztatás jellemzői:

Kevésbé formális mód az egyszerű másolás, amit akkor használnak, ha már látszódik, hogy a két vonal fejlesztése egyre inkább elszakad egymástól.

Az új verzió fejlesztésének kezdetekor az elágazásnak vannak előnyei, például a már létező verziót nem zavarják az újabb fejlesztések. Hasonló a helyzet, ha mélyebb átdolgozás történik, és a csapat egy új termékkel áll elő.

  • Nincs szükség az elágazáskor regressziós tesztre, amivel rövidítik a piacra jutási időt.
  • Nem vezetnek be újabb hibákat a már létező verzióba, így a felhasználókat ez nem érinti.

A hátrányok:

  • A régi hibákat mindkét helyen javítani kell.
  • Ha kiderül, hogy az új verzió nem fog nagyon különbözni a régitől, így két verziót kell fenntartani. Ez növeli a fenntartás költségét. Szükség lehet refaktorálásra, amit kézzel kell átvezetni mindkét termékbe.

Alternatíva lehet a modularizált fejlesztés:

  • Kifraktorálja a mindkét termék által részt egy külön modulba, könyvtárba.
  • Ezeket használják az új termékhez vagy verzióhoz.
  • Ha jönnek a további verziók, akkor a hozzáadott kódot külön modulba teszik.[5]

Ismétlődő és hasonló feladatok

A másolásos programozás által keletkezett kód javításának problémája

A másol-beillesztéses programozás egyik legártalmasabb formája, ha ugyanazt a kódot használják több helyen. Ennek egy változata, hogy egy változótól függ, hogy mikor melyiket. Ahelyett, hogy függvénybe vagy szubrutinba tennék őket, és azt hívnák meg, ezzel a változóval mint paraméterrel, a kódot több helyre másolják. Ennek káros következményei:

  • Hosszabbak lesznek a metódusok.
  • Ha egy hiba előfordul az egyik helyen, akkor a többi helyen is megtalálható. Ahelyett, hogy egyszerre ki lehetne javítani, ha elég sok másolat van, akkor kimaradhat belőle néhány, amit újra ki kell majd javítani. Ezzel a javítás költsége megnő.[6]
  • Rontja az olvashatóságot, mivel külön figyelni kell, hogy melyik előfordulás mennyiben más. Növeli a hibalehetőséget, és a kód vizsgálatát is lassítja.
  • A procedurális programozás a függvények és szubrutinok használatát ajánlja.[7]
  • Az általános ökölszabály: Ne ismételd önmagad!

Elfogadható alkalmazások

Néha a másolásos programozás elfogadható. Többnyire a boilerplate kódot kell másolni, mint deklarációkat, importált könyvtárakat, használt keretrendszert. Ezt elvégezheti a fejlesztőkörnyezet is.

Programozási idiómák, programtervezési minták használatakor ki lehet indulni az eleve adott kódból. Az idiómákat, snippeteket általában célszerű függvényként vagy szubrutinként betenni.

A Subtext programozási nyelv egy kutatási projekt, ami a másolásos programozás elfogadhatóvá tételét célozza.

Példa

Egy egyszerű példa egy ciklus: for (int i=0; i!=n; ++i) {}.

Példa kód, ami ezt használja:

void foo(int n) {
    for (int i=0; i!=n; ++i) {
       /* body */
    }
}

A ciklust generálhatja a következő snippet:

    for ($type $loop_var = 0; $loop_var != $stop; ++$loop_var) {
        /* body */
    }

Fordítás

Ez a szócikk részben vagy egészben a Copy and paste programming című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Jegyzetek

  1. a b Revisiting Novice Programmers Errors. acm.org. (Hozzáférés: 2008. június 4.)
  2. Building ASP.NET Web Pages Dynamically in the Code-Behind. codeproject.com. (Hozzáférés: 2008. június 4.)
  3. Spinellis, Diomidis: The Bad Code Spotter's Guide. InformIT.com. (Hozzáférés: 2008. június 6.)
  4. Lewallen, Raymond: 4 major principles of Object-Oriented Programming. codebetter.com. [2010. november 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. június 4.)
  5. Eriksen, Lisa: Code Reuse In Object Oriented Software Development. Norwegian University of Science and Technology, Department of Computer and Information Science. (Hozzáférés: 2008. május 29.)
  6. Ashley Marsh: Coding Standards – The Way to Maintainable Code. MAAN Softwares INC.. (Hozzáférés: 2018. április 10.)[halott link]
  7. Stanford University, CS 106X ("Programming Abstractions") Course Handout: "Decomposition". Stanford University. [2008. május 16-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. június 4.)

Read other articles:

Dai LiDaiNama asli戴笠JulukanHimmler dari TiongkokLahir(1897-05-28)28 Mei 1897Jiangshan, Zhejiang, Dinasti QingMeninggal17 Maret 1946(1946-03-17) (umur 48)Nanjing, TiongkokPengabdianRepublik TiongkokLama dinas1927-1946PangkatLetnan JenderalKomandanInvestigation and Statistics BureauPerang/pertempuranSecond Sino-Japanese War, Chinese Civil WarPenghargaanOrder of Blue Sky and White Sun Tai Li atau sering dikenal sebagai Letnan Jenderal Dai, adalah seorang tokoh Tiongkok, pemimpin ba...

 

Election 1858 Vermont gubernatorial election ← 1857 September 7, 1858 (1858-09-07) 1859 →   Nominee Hiland Hall Henry Keyes Party Republican Democratic Popular vote 29,660 13,338 Percentage 68.6% 30.9% Governor before election Ryland Fletcher Republican Elected Governor Hiland Hall Republican Elections in Vermont Federal government Presidential elections 1792 1796 1800 1804 1808 1812 1816 1820 1824 1828 1832 1836 1840 1844 1848 1852 1856 1860 186...

 

American election 1875 Wisconsin gubernatorial election ← 1873 November 2, 1875 1877 →   Nominee Harrison Ludington William Robert Taylor Party Republican Democratic Alliance — Reform Popular vote 85,155 84,314 Percentage 50.07% 49.58% County resultsLudington :      50–60%      60–70%      70–80%      80–90%      >90%Tay...

Sporting event delegationEswatini at the2017 World Aquatics ChampionshipsFlag of SwazilandFINA codeSWZNational federationSwaziland National Swimming Federationin Budapest, HungaryCompetitors3 in 1 sportMedals Gold 0 Silver 0 Bronze 0 Total 0 World Aquatics Championships appearances19982001200320052007200920112013201520172019202220232024 Swaziland competed at the 2017 World Aquatics Championships in Budapest, Hungary from 14 July to 30 July. Swimming Main article: Swimming at the 2017 World A...

 

Синелобый амазон Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:ЗавропсидыКласс:Пт�...

 

Basketball team in Israel Hapoel JerusalemLeaguesIsraeli Basketball Premier LeagueFounded1943; 81 years ago (1943)HistoryHapoel Jerusalem B.C.(1943–present)ArenaPais ArenaCapacity11,000LocationJerusalemTeam colorsRed, Black, White     Main sponsorBank YahavCEOAlon KremerPresidentMatan AdelsonHead coachIlias KantzourisOwnershipMatan Adelson (90%)Fan association (10%)Championships2 Israeli Championship1 EuroCup7 Israeli State Cups6 Israeli League CupsWebsiteha...

Charles RovenRoven pada 2010Lahir2 Agustus 1949 (umur 74)PekerjaanProduser filmSuami/istriDawn Steel (1985–97; kematiannya)Stephanie Haymes Charles Roven (lahir 2 Agustus 1949)[1] adalah seorang produser film Amerika Serikat dan presiden dan salah satu pendiri Atlas Entertainment. Ia dikenal karena memproduksi film-film pahlawan super The Dark Knight Trilogy, Suicide Squad, Man of Steel, Batman v Superman: Dawn of Justice dan more.[2] Referensi ^ Biographical Summaries...

 

Bronze sculpture in Germany Statue of Adolf DasslerSculpture of Adolf Dassler in the Adi-Dassler-Stadion in Herzogenaurach (Germany), by sculptor Josef Tabachnyk, Bronze, 2006ArtistJosef TabachnykYear2006 (2006)MediumBronzeSubjectAdolf DasslerLocationAdi Dassler stadium, Herzogenaurach The Statue of Adolf Dassler is a life-size sculpture, which was erected in May 2006 at the Adi Dassler stadium in Herzogenaurach. The sculpture portrays the founder of the sporting goods company Adidas, an...

 

Brothers ConflictKonflik Bersaudaraブラザーズ コンフリクト(Burazāzu Konfurikuto)GenreKomedi Romantis, harem Seri novelPengarangTakeshi MizunoIlustratorUdajoPenerbitASCII Media WorksMajalahSylphDemografiPerempuanTerbit22 Desember 2010 – 21 Juli 2012Volume7 PermainanBrothers Conflict: Passion PinkPengembangIdea FactoryPenerbitOtomateGenreOtomePlatformPlayStation PortableRilis17 Mei 2012 MangaBrothers Conflict PurupuruPengarangTakeshi MizunoIlustratorDeathco CotorinoPenerbitASCII M...

South Korean entertainment company FNC EntertainmentNative name에프엔씨엔터테인먼트FNC 엔터테인먼트FormerlyFNC Music (2006–2012)Company typePublicTraded asKRX: 173940IndustryEntertainmentGenreK-popR&BDanceBalladDance-popRockFoundedDecember 14, 2006 (2006-12-14)FounderHan Seong-hoHeadquartersSeoul, South KoreaArea servedWorldwideKey peopleHan Seong-ho (Founder and Chairman) Ahn Seok-joon (CEO)Han Seung-hoon (CEO, Han Seong-ho's brother)Cho Sung-wan (Preside...

 

European Parliament political group This article is about the current European Parliament Group. For the europarty established in 1992, see Party of European Socialists. S&D redirects here. For other uses, see S&D (disambiguation). Progressive Allianceof Socialists and DemocratsEuropean Parliament groupNameProgressive Allianceof Socialists and DemocratsEnglish abbr.S&D[1](23 June 2009 – present) Older: PES[2](21 April 1993[3] – 22 June 2009)SOC[2 ...

 

Sasanian emperor, 379–383 For the 13th-century Bavandid ruler in Mazandaran, see Ardashir II (Bavandid ruler). Ardashir II𐭠𐭥𐭲𐭧𐭱𐭲𐭥King of Kings of Iran and non-Iran[a]Relief of Ardashir II in Taq-e BostanKing of AdiabeneReign344 – 376PredecessorUnknownSuccessorTitle abolished; Adiabene transformed into a provinceShahanshah of the Sasanian EmpireReign379 – 383PredecessorShapur IISuccessorShapur IIIBorn309/10Died383HouseHouse of SasanFatherHormizd IIReligionZor...

Geopolitik Eropa Timur pada awal 2014 yang menunjukkan zona-zona konflik beku Transnistria, Krimea, Abkhazia, dan Ossetia Selatan (nomor 1–4) serta Artsakh (daerah berwarna gelap di Azerbaijan), Siprus Utara (daerah berwarna terang di Siprus), dan Kosovo (daerah berwarna krem di Serbia). Israel, wilayah Palestina, dan Dataran Tinggi Golan juga ada di peta, tetapi tidak disorot. Zona konflik beku lainnya tidak ditampilkan. Dalam hubungan internasional, konflik beku adalah situasi ketika konf...

 

Lambang Molde Molde ialah sebuah kota di Norwegia, ibu kota provinsi Moere og Romsdal. Terletak di pesisir utara Romsdalsfjord di Semenanjung Romsdal, Molde, juga dikenal sebagai Kota Kembang, terkenal karena panoramanya yang spektakuler di sisi selatan fjord. Di samping menjadi ibu kota regional More og Romsdal, dan pusat perdagangan Romsdal, kota ini juga menuanrumahi keuskupan Møre. Nama Molde kemungkinan diturunkan dari Bahasa Norse Kuno moldar, bentuk jamak mold yang berarti tanah yang ...

 

Software tools for handling software packages 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: Package manager – news · newspapers · books · scholar · JSTOR (December 2022) (Learn how and when to remove this message) Synaptic, example of a package manager A package manager or package-management system is a co...

Export lumber business, Bay Harbor, Florida, 1910s Bay Harbor is a ghost town in Bay County, Florida, United States. Overview Bay Harbor was a small settlement mostly centered on the paper mill that was here at the site. Bay Harbor is currently part of the Panama City Paper Mill.[1] See also List of ghost towns in Florida References ^ Bay Harbor - Ghost Town. www.ghosttowns.com. Retrieved March 22, 2016. vteMunicipalities and communities of Bay County, Florida, United StatesCounty se...

 

Världscupen i alpin skidåkning 1981/1982 Segrare Totalt Erika Hess,  Schweiz (damer) Phil Mahre,  USA (herrar) <<< 1980/1981 1982/1983 >>> Världscupen i alpin skidåkning 1981/1982 inleddes den 3 december 1981 i Val d'Isère och avslutades 27 mars 1982 i Montgenèvre. Vinnare av totala världscupen blev Erika Hess och Phil Mahre. Tävlingskalender Herrar Störtlopp Datum Ort Etta Tvåa Trea 6 december 1981 Val d’Isère (Frankrike) Franz Klammer (Österrike) P...

 

Yvonne CatterfeldCatterfeld, 2018Lahir2 Desember 1979 (umur 44)Erfurt, Jerman Timur(sekarang Jerman)PekerjaanPenyanyiaktrisTahun aktif2001–sekarangSuami/istriOliver Wnuk (2007–sekarang)Anak1Karier musikGenrePopsoulInstrumenVokalSitus webyvonnecatterfeld.de Penghargaan(2004) Osgar (en) (2004) Berliner Bär (en) (2004) Q113062373 (2003) Goldene Stimmgabel (en) Yvonne Catterfeld (lahir 2 Desember 1979) adalah seorang penyanyi, aktris, dan tokoh pertelevisian Jerman. Lahir dan dibe...

Volkswagen Caminhões e Ônibus Volkswagen Constellation 17.330Volkswagen Constellation 17.330 Constellation Hersteller: MAN Produktionszeitraum: seit 2002/05 Vorgängermodell: Volkswagen Titan Nachfolgemodell: keines Technische Daten Bauformen: Fahrgestell, diverse Aufbauten Motoren: Sechszylinder-Dieselmotor Leistung: bis zu 237 kW VW Constellation Titan Tractor 19.320 VW Constellation Der VW Constellation ist ein LKW von Volkswagen Caminhões e Ônibus. Der Constellation wird seit de...

 

German TV station 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: Sat.1 – news · newspapers · books · scholar · JSTOR (June 2014) (Learn how and when to remove this message) Television channel Sat.1CountryGermanyBroadcast areaGermanyAustriaSwitzerlandLiechtensteinPolandRomaniaLithuaniaHeadquartersUnterföhri...