Che cos'è un "livello di astrazione"?

4

Ho bisogno di una spiegazione molto semplice perché non sono un programmatore professionista.

Ho trovato la terminologia "livello di astrazione" che legge la documentazione dell'estensione mysqli dove è descritta la differenza tra le estensioni mysql, mysqli e PDO in PHP. L'articolo è questo , è lì che ho incontrato "il livello di astrazione" per la prima volta (riferito a DOP).

Ora, cercando di elaborare la mia domanda, potremmo parlare del livello di astrazione PDO contro l'estensione mysqli in php. Quindi, ad esempio, perché mysqli non è definito come livello di astrazione? Come agisce uno strato di astrazione? (come PDO in PHP)

Mi piacerebbe capire in generale che cos'è un "livello di astrazione", non farò particolari domande sulle estensioni php o mysqli e PDO.

Quindi, cos'è un livello di astrazione? E qual è la sua differenza dall'estensione di un'applicazione comune?

    
posta marco 12.01.2014 - 18:26
fonte

3 risposte

9

Spesso un livello di astrazione viene comunemente usato per "astrarre" i dettagli lontani.

Supponiamo che tu abbia un programma per spostare denaro tra banche diverse. C'è una funzione per spostare denaro in BankA e una funzione diversa per spostare denaro in BankB e così via. Le diverse funzioni potrebbero esistere perché le informazioni richieste dalle diverse banche variano (come un semplice esempio, si potrebbe chiedere al mittente nome e cognome, e un altro richiede ai mittenti prima l'iniziale e il cognome).

Le tue funzioni potrebbero essere:

MoveMoneyToBankA(amount, accountNo, senderFirstName, senderSurname)
{
   ... Code to move money to bank A
}

MoveMoneyToBankB(amount, accountNo, senderFirstInitial, senderSurname)
{
   ... Code to move money to bank A
}

Per astrarre tutte le diverse cose a cui un programma deve pensare quando comunica con banchi diversi, un livello di astrazione potrebbe essere implementato aggiungendo la funzione 'MoveMoneyToBank'

MoveMoneyToBank(amount, accountNo, senderFirstName, senderSurname, bankName)
{
   ... If bank name = 'BankA' call MoveMoneyToBankA

   ... If bank name = 'BankB', find senderFirstInitial using senderFirstName, and call 'MoveMoneyToBankB'
}

Quindi ciò che hai fatto qui è astratto dei dettagli che devono essere gestiti quando si comunica con due banche diverse. Un programmatore ora può semplicemente utilizzare la funzione generale MoveMoneyToBank e non deve pensare ai diversi requisiti di ogni banca.

In realtà, questo potrebbe non essere solo funzioni con nello stesso programma, ma anche diversi progetti all'interno della stessa soluzione, o un nuovo progetto software che richiama molti componenti e si occupa della complessità di lavorare con tutti i componenti separati per raggiungere un obiettivo comune.

    
risposta data 12.01.2014 - 19:20
fonte
1

In generale, un livello di astrazione è un'API (set di funzioni) che nasconde l'implementazione / complessità sottostante. Lo scopo è quello di fornire un'interfaccia chiara e più facile da usare su un set esistente di funzionalità.

Immagina di voler creare una pila usando un elenco. Potresti creare una classe chiamata Stack . Avresti una lista privata al suo interno per memorizzare gli elementi. Avresti anche i metodi per spingere e popare elementi dalla pila. Questa classe è un livello di astrazione su una lista che rappresenta una pila. Nasconde l'implementazione (come vengono memorizzati gli elementi, come vengono spinti e spuntati) e fornisce una semplice interfaccia per lavorare con uno stack.

L' articolo di wikipedia sui livelli di astrazione è un buon punto di partenza.

Riguardo ai livelli di astrazione del database. Ad esempio, hai un database MySQL e vuoi accedervi dal tuo programma PHP. In questo caso, un livello di astrazione fornirebbe la funzionalità di aprire la connessione al database, eseguire query, richiamare stored procedure, ecc. Quindi, quando si lavora con il database dal codice PHP, non si dovrà pensare a come la connessione viene effettivamente creata o in che modo le query MySQL vengono effettivamente passate al database, eseguite lì e in che modo viene restituito e analizzato il risultato.

    
risposta data 12.01.2014 - 19:05
fonte
1

Penso che nella maggior parte delle circostanze, un livello di astrazione serve da semplificazione o gateway per un livello sottostante più complicato.

Supponiamo di disporre di un livello database che ti consente di eseguire quasi tutte le operazioni di database che puoi immaginare. Tuttavia, un tale livello o API sarebbe piuttosto complicato da utilizzare a causa del numero di funzioni. Soprattutto se vuoi solo fare qualcosa di semplice.

In questo caso, potrebbe essere disponibile un livello di astrazione che fornisce solo un sottoinsieme delle funzionalità in un modo più facile da usare. Mentre si utilizza ancora il livello sottostante, questo livello potrebbe quindi fornire metodi / funzioni con un nome più intuitivo, parametri più facili da utilizzare e / o parametri predefiniti che dovrebbero aiutarti a iniziare ...

Spesso, tali livelli di astrazione introducono anche concetti più generali o reali che sono più facilmente comprensibili da persone che non sono esperti di dominio. (Per fare un esempio tecnico: il livello del database potrebbe restituirti un set di risultati che deve essere iterato, mentre l'astrazione potrebbe restituirti un elenco di oggetti ben definiti che sono pronti per essere usati)

Sebbene tali livelli sottostanti offrano una maggiore funzionalità, in genere richiedono più tempo per fare qualcosa se non si ha ancora familiarità con esso.

    
risposta data 12.01.2014 - 19:21
fonte

Leggi altre domande sui tag