Programvara ramverk
Inom datorprogrammering är ett mjukvaruramverk en abstraktion där programvara , som tillhandahåller generisk funktionalitet, selektivt kan ändras med ytterligare användarskriven kod, vilket ger applikationsspecifik programvara. Det tillhandahåller ett standardsätt att bygga och distribuera applikationer och är en universell, återanvändbar mjukvarumiljö som tillhandahåller speciell funktionalitet som en del av en större mjukvaruplattform för att underlätta utvecklingen av mjukvaruapplikationer , produkter och lösningar.
Programvaruramverk kan inkludera stödprogram, kompilatorer, kodbibliotek, verktygsuppsättningar och applikationsprogrammeringsgränssnitt (API) som sammanför alla olika komponenter för att möjliggöra utveckling av ett projekt eller system .
Ramar har viktiga särskiljande egenskaper som skiljer dem från vanliga bibliotek :
- inversion av kontroll : I ett ramverk, till skillnad från i bibliotek eller i vanliga användarapplikationer, dikteras inte det övergripande programmets kontrollflöde av anroparen utan av ramverket. Detta uppnås vanligtvis med Template Method Pattern .
- standardbeteende : Detta kan tillhandahållas med de invarianta metoderna i Template Method Pattern i en abstrakt klass som tillhandahålls av ramverket.
- utökningsbarhet : En användare kan utöka ramverket – vanligtvis genom selektiv överstyrning – eller så kan programmerare lägga till specialiserad användarkod för att tillhandahålla specifik funktionalitet. Detta uppnås vanligtvis genom en hook-metod i en underklass som åsidosätter en mallmetod i superklassen.
- icke-modifierbar ramkod : Ramkoden är i allmänhet inte tänkt att modifieras, medan den accepterar användarimplementerade tillägg. Med andra ord kan användare utöka ramverket, men kan inte ändra dess kod.
Logisk grund
Utformarna av mjukvaruramverk strävar efter att underlätta mjukvaruutvecklingen genom att tillåta designers och programmerare att ägna sin tid åt att möta mjukvarukraven snarare än att ta itu med de mer standardiserade lågnivådetaljerna för att tillhandahålla ett fungerande system, och därmed minska den totala utvecklingstiden. Till exempel kan ett team som använder ett webbramverk för att utveckla en bankwebbplats fokusera på att skriva kod som är specifik för banker snarare än mekaniken för förfrågningshantering och tillståndshantering .
Ramar ökar ofta storleken på program, ett fenomen som kallas " code bloat" . På grund av kundefterfrågan-drivna applikationsbehov hamnar ibland både konkurrerande och kompletterande ramverk i en produkt. På grund av komplexiteten hos deras API:er kanske den avsedda minskningen av den totala utvecklingstiden inte uppnås på grund av behovet av att lägga ytterligare tid på att lära sig att använda ramverket; denna kritik är helt klart giltig när ett speciellt eller nytt ramverk först möter utvecklingspersonal. [ citat behövs ] Om ett sådant ramverk inte används i efterföljande arbetsuppgifter, kan den tid som investeras i att lära sig ramverket kosta mer än avsedd kod som är bekant för projektets personal; många programmerare har kopior av användbar kod för vanliga behov.
Men när man väl har lärt sig ett ramverk kan framtida projekt bli snabbare och lättare att slutföra; Konceptet med ett ramverk är att skapa en lösning som passar alla, och med förtrogenhet bör kodproduktionen logiskt stiga. Det finns inga sådana påståenden om storleken på koden som så småningom kommer med den utgående produkten, inte heller dess relativa effektivitet och koncisthet. Att använda vilken bibliotekslösning som helst drar nödvändigtvis in extramaterial och oanvända externa tillgångar såvida inte programvaran är en kompilator-objektlänk som gör en tät (liten, helt kontrollerad och specificerad) exekverbar modul.
Problemet fortsätter, men ett decennium av branscherfarenhet [ citat behövs ] har visat att de mest effektiva ramverken visar sig vara de som utvecklas från att omfaktorisera företagets gemensamma kod istället för att använda en generisk "one-size" -fits-all-ramverket utvecklat av tredje part för allmänna ändamål. Ett exempel på det skulle vara hur användargränssnittet i ett sådant applikationspaket som en kontorssvit växer till att ha gemensamma utseende, känsla och datadelningsattribut och -metoder, eftersom de en gång så olika paketerade applikationerna växer samman till en svit som är tätare och mindre; den nyare/utvecklade sviten kan vara en produkt som delar integrerade verktygsbibliotek och användargränssnitt.
Denna trend i kontroversen tar upp en viktig fråga om ramverk. Att skapa ett ramverk som är elegant, kontra ett som bara löser ett problem, är fortfarande snarare ett hantverk än en vetenskap. "Software elegans " innebär tydlighet, kortfattadhet och lite slöseri (extra eller ovidkommande funktionalitet, varav mycket är användardefinierad). För de ramverk som genererar kod, till exempel, skulle "elegans" innebära skapandet av kod som är ren och begriplig för en någorlunda kunnig programmerare (och som därför är lätt att modifiera), jämfört med en som bara genererar korrekt kod. Elegansfrågan är varför relativt få mjukvaruramverk har bestått tidens tand: de bästa ramverken har kunnat utvecklas graciöst eftersom den underliggande teknologin som de byggdes på är avancerad. Även där, efter att ha utvecklats, kommer många sådana paket att behålla äldre kapacitet och svälla upp den slutliga programvaran eftersom annars ersatta metoder har behållits parallellt med de nyare metoderna.
Exempel
Programvaruramverk innehåller vanligtvis avsevärd hushålls- och verktygskod för att hjälpa till att starta upp användarapplikationer, men fokuserar vanligtvis på specifika problemdomäner, som:
- Konstnärlig teckning, musikkomposition och mekanisk CAD
- Finansiella modelleringsapplikationer
- Tillämpningar för modellering av jordsystem
- Beslutsstödssystem
- Mediauppspelning och författande
- Webbramverk
- Mellanvara
- Cactus Framework – Högpresterande vetenskaplig beräkning.
- Applikationsramverk – Allmänna GUI-applikationer.
- Enterprise Architecture ramverk
- Oracle Application Development Framework
- Laravel (PHP Framework)
- Skadlig programvara , till exempel Pipedream
Arkitektur
Enligt Pree består mjukvaruramverk av frusna punkter och hotspots . Frosna fläckar definierar den övergripande arkitekturen för ett mjukvarusystem, det vill säga dess grundläggande komponenter och relationerna mellan dem. Dessa förblir oförändrade (frysta) i alla instansieringar av applikationsramverket. Hot spots representerar de delar där programmerare som använder ramverket lägger till sin egen kod för att lägga till den funktionalitet som är specifik för sitt eget projekt.
I en objektorienterad miljö består ett ramverk av abstrakta och konkreta klasser . Instantiering av ett sådant ramverk består av att komponera och underklassa de befintliga klasserna.
Den nödvändiga funktionaliteten kan implementeras genom att använda mallmetoden där de frusna punkterna är kända som invarianta metoder och hotspots är kända som variant- eller krokmetoder. De invarianta metoderna i superklassen ger standardbeteende medan hook-metoderna i varje underklass ger anpassat beteende.
När utvecklare utvecklar ett konkret mjukvarusystem med ett mjukvaruramverk använder utvecklarna hot spots enligt de specifika behoven och kraven i systemet. Programvara bygger på Hollywood-principen : "Ring inte oss, vi ringer dig." Detta innebär att de användardefinierade klasserna (till exempel nya underklasser) tar emot meddelanden från de fördefinierade ramverksklasserna. Utvecklare hanterar vanligtvis detta genom att implementera abstrakta superklassmetoder .
Se även
- Klass (datavetenskap)
- Designmönster (datavetenskap)
- Upprepa inte dig själv
- Implicit anrop
- Programvarumotor
externa länkar
- Ordboksdefinitionen av mjukvaruramverk på Wiktionary
- Media relaterade till programvara ramverk på Wikimedia Commons