Si può rispondere scrivendo un libro su questo. Tuttavia, ecco un confronto di base
1. Programmazione orientata al soggetto
La programmazione orientata al soggetto è una svolta radicale rispetto all'Object oriented come segue. In OO, gli oggetti sono definiti in termini di intrinseco (cioè basato su un modello che lo descrive in modo indipendente). e in base a ciò vengono derivati i suoi attributi (proprietà) e metodi (comportamento). L'applicazione rende solo il uso di queste proprietà e comportamenti. Contrariamente a ciò, nella programmazione orientata ai soggetti, nessun oggetto esiste (e modellato) in un tale isolamento. Nel processo, ma i comportamenti degli oggetti sono stati forniti dai vari altri "soggetti" degli oggetti che vanno oltre lo scopo e il controllo dell'autore dell'oggetto originale. Pensa ad esso come un modo per estendere vari "comportamenti definibili in modo indipendente". "sull'oggetto, penso che sarebbe molto oltre la definizione di modelli di ereditarietà rispetto a ciò che viene discusso qui.
L'origine indiscussa dei termini (e del concetto) deriva dal documento " Programmazione orientata al soggetto: una critica di oggetti puri , William Harrison e Harold Ossher". Ecco un'altra buona carta . Sebbene personalmente ritengo che questo sia un quadro teorico. Non so se ci sono lingue / implementazione
Vedi questo , < a href="http://www.research.ibm.com/designpatterns/pubs/ph-feb98.pdf"> questo e this per maggiori informazioni.
2. Programmazione orientata agli aspetti
La programmazione orientata agli aspetti è stata originata concetto di " Separazione di oncern ". Fondamentalmente estende la programmazione procedurale o orientata agli oggetti per le preoccupazioni che sono trasversali. Oltre a semplificare si può dire che il software ha requisiti funzionali e non funzionali . Questi requisiti trasversali includono esempi come la registrazione, la gestione delle eccezioni, la sincronizzazione dei thread, la gestione della memoria, l'ottimizzazione e così via. Questi ASPETTI trasversali dovrebbero essere espressi e implementati separatamente e indipendentemente da qualsiasi altra parte funzionale.
Un'opera completa in quest'area proviene da IBM ; fondamentalmente ogni interesse o aspetti può essere indipendente l'uno dall'altro formando "spazio di preoccupazione" multidimensionale. , (leggi questo ).
Alcune delle buone implementazioni pratiche di Aspect Oriented sono AspectJ e AspectC ++ e molti altri . Vedi questo .
3. Programmazione orientata ai ruoli
Mentre ci evolviamo verso gli agenti, molte volte è necessario definire "ruoli" e obiettivi laddove le attività esatte che l'agente finisce per eseguire dipende dall'ambiente in cui si trova. Ciò è analogo alla comprensione concettuale umana.
L'obiettivo principale è separare l'obiettivo dell'attività dalla sua capacità di cooperazione definendo un costrutto esplicito chiamato processi di cooperazione .
Un ruolo è modellato come un insieme di capacità e un comportamento previsto. tuttavia, questi approcci consentono anche la modellazione dell'ambiente di esecuzione e il modo in cui l'agente / oggetto può percepire anche l'ambiente. Vedi questo .
Vi sono vari quadri proposti nella ricerca per la modellazione e le implementazioni basate sui ruoli. Alcuni di questi sono ROPE , BRAIN , ALAADIN e informazioni .