Riuso di codiceIn informatica con il termine riuso di codice si intende la pratica, estremamente comune nella programmazione, di richiamare o invocare parti di codice precedentemente già scritte ogni qualvolta risulta necessario, senza doverle riscrivere daccapo. DescrizioneQuesto essenzialmente si concretizza nella scrittura di funzioni che possono essere richiamate o invocate all'interno di uno stesso programma, o raggruppate all'interno di librerie che possono essere a loro volta "collegate" su necessità all'interno dei vari programmi oppure nelle API. Nella pratica della programmazione ad oggetti, ad essere in qualche modo "richiamate", "importate" o "ereditate" sono le classi, sempre su necessità, ed eventualmente "estese" con nuove funzioni o metodi all'interno del programma stesso. Il riuso di codice permette dunque un risparmio notevole nei tempi di scrittura di un programma da parte del programmatore, facilitando il lavoro di programmazione e migliorando la leggibilità del codice divenuto più corto e sintetico, ed è per questo presente in quasi tutti i linguaggi di programmazione, di cui rappresenta un'evoluzione già nelle primissime tecniche di programmazione, anche se obbliga in qualche modo il programmatore alla conoscenza delle varie librerie e funzioni disponibili o delle API. Tipi di riusoIl riuso può essere[1]:
Il riuso può essere ulteriormente classificato[1]:
Per quanto riguarda la forma o la struttura del riuso, il codice può essere:
Riuso sistematicoIl riuso sistematico del software è una strategia per aumentare la produttività e migliorare la qualità dell'industria del software. Sebbene sia semplice nel concetto, l'implementazione di successo del riutilizzo del software è difficile nella pratica. Una ragione addotta per questo è la dipendenza del riutilizzo del software dal contesto in cui è implementato. Alcuni problemi che devono essere affrontati in relazione al riuso sistematico del software sono[2][1]:
Campi di impiegoLibrerie softwareUn esempio molto comune di riutilizzo del codice è la tecnica di utilizzo di una libreria software. Di seguito un esempio di codice riusabile della libreria JQuery: $("a").css( { color: 'red', width: '150px' } )
.show( '1000' )
.click( function () {
alert( 'clicked!' );
} );
Modelli di progettazioneUn "design pattern" o "modello di progettazione" è una soluzione generale a un problema ricorrente. I modelli di progettazione sono più concettuali che tangibili e possono essere modificati per soddisfare l'esatta esigenza. Tuttavia, classi e interfacce astratte possono essere riutilizzate per implementare determinati modelli. Di seguito un esempio di design pattern riusabile: public class EagerSingleton {
// create an instance of the class.
private static EagerSingleton instance = new EagerSingleton();
// private constructor, so it cannot be instantiated outside this class.
private EagerSingleton() { }
// get the only instance of the object created.
public static EagerSingleton getInstance() {
return instance;
}
}
Funzione di ordine superioreNella programmazione funzionale le funzioni di ordine superiore possono essere utilizzate in molti casi in cui in precedenza venivano utilizzati design pattern o framework. Di seguito un esempio con Julia: julia> function twice(f)
function result(a)
return f(f(a))
end
return result
end
twice (generic function with 1 method)
julia> plusthree(x) = x + 3
plusthree (generic function with 1 method)
julia> g = twice(plusthree)
(::var"#result#3"{typeof(plusthree)}) (generic function with 1 method)
julia> g(7)
13
RetrocomputingIl retrocomputing comprende il riutilizzo del codice, semplicemente perché i programmi retrò vengono eseguiti su computer più vecchi o emulatori per essi. Sicurezza informaticaNella sicurezza informatica il riutilizzo del codice è impiegato come metodo di exploit del software[3]. Quando un utente malintenzionato non è in grado di inserire direttamente il codice per modificare il flusso di controllo di un programma, ad esempio in presenza di difese da iniezione di codice come W ^ X, può reindirizzare il flusso di controllo a sequenze di codice esistenti in memoria. ComponentiUn componente, in una misura orientata agli oggetti, rappresenta un insieme di classi collaborative (o solo una classe) e le sue interfacce[4]. Le interfacce sono responsabili dell'abilitazione alla sostituzione dei componenti. I componenti riutilizzabili possono anche essere isolati e sincronizzati tra i repository SCM utilizzando le tecnologie di gestione del codice sorgente dei componenti (CSCM)[5]. Di seguito un esempio di componente riusabile: import React da 'React';
import {Logo, ProfileImage, BurgerMenu, HeaderWrapper} da "component";
const Header = () => (
<HeaderWrapper>
<Logo> </Logo>
<ProfileImage> </ProfileImage>
<BurgerMenu> </BurgerMenu>
</HeaderWrapper>
)
Computer esterniL'intero concetto di "riutilizzo del codice" può comprendere anche applicazioni di ingegneria al di fuori del software. Ad esempio, la modellazione parametrica nella progettazione assistita da computer consente di creare progetti riutilizzabili. Esempi di riuso di codiceLa maggior parte del codice HTML, CSS e (se presente) JS di una pagina web può essere riusato per creare più pagine web con contenuti diversi ma aventi lo stesso layout o un layout molto simile. Di seguito una porzione di codice riusabile HTML 5 della pagina mostrata nell'immagine. <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>My Website</title>
</head>
<body>
<header>
<nav>
<ul>
<li>Menu</li>
</ul>
</nav>
</header>
<section>
<article>
<header>
<h2>Article title</h2>
<p>Posted on <time datetime="2020-09-04T16:31:24+02:00">September 4th 2020</time> by <a href="#">Writer</a> - <a href="#comments">6 comments</a></p>
</header>
<p>Pellentesque habitant morbi tristique senectus. </p>
</article>
</section>
<aside>
<h2>About section</h2>
<p>Donec eu libero sit amet quam egestas semper.</p>
</aside>
<footer>
<p>Copyright 2020 Kate Ross</p>
</footer>
</body>
</html>
Anche nel caso di SVG e WebGL/Canvas può essere riusato parte dello stesso codice per creare progetti diversi: Codice SVG riusato per creare il cerchio la seconda volta <g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<circle
id="path3699"
cx="97.517845"
cy="131.44643"
r="34.773811"
style="stroke-width:0.26458332" />
</g>
Codice Canvas riusato per creare il cerchio la seconda volta var SVGIcons = {
"": {
draw: function(ctx){
ctx.save();
ctx.strokeStyle="rgba(0,0,0,0)";
ctx.miterLimit=4;
ctx.font="15px / 21.4286px ''";
ctx.font=" 15px ";
ctx.font=" 15px ";
ctx.beginPath();
ctx.arc(97.517845,131.44643,34.773811,0,6.283185307179586,false);
ctx.closePath();
}
}}
Note
Bibliografia
Voci correlate |