Si può rispondere a questo scrivendo un libro su questo. Tuttavia, ecco un confronto di base
1. Programmazione orientata al soggetto
La programmazione orientata al soggetto è una deviazione radicale dall'oggetto orientata come segue. In OO, gli oggetti sono definiti in termini intrinseci (cioè basati su un modello che lo descrive in modo indipendente). e in base a ciò derivano i suoi attributi (proprietà) e metodi (comportamento). L'applicazione fa solo l' usodi queste proprietà e comportamenti. Contrariamente a questo, nella programmazione orientata al soggetto, nessun oggetto (e modellato) esiste 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. Consideralo come un modo per estendere vari "comportamenti definibili indipendentemente "sull'oggetto. Penso che ciò andrebbe ben oltre la definizione di modelli di eredità rispetto a ciò che viene discusso qui.
L'origine indiscussa dei termini (e del concetto) deriva dall'articolo " Programmazione orientata al soggetto: una critica agli oggetti puri , William Harrison e Harold Ossher". Ecco un altro buon documento . Anche se personalmente credo che questo sia un quadro teorico. Non so se ci siano lingue / implementazioni
Vedi questo , questo e questo per maggiori informazioni.
2. Programmazione orientata all'aspetto
La programmazione orientata all'aspetto ha avuto origine dal concetto di " Separazione delle preoccupazioni ". Fondamentalmente estende la programmazione procedurale o orientata agli oggetti per preoccupazioni che sono trasversali. Una semplificazione eccessiva può dire che il software ha requisiti funzionali e non funzionali . Questi requisiti trasversali includono esempi come registrazione, gestione delle eccezioni, sincronizzazione dei thread, gestione della memoria, ottimizzazione e così via. Questi ASPETTI trasversali dovrebbero essere espressi e implementati separatamente e indipendentemente da qualsiasi altra parte funzionale.
Un lavoro completo in questo settore è di IBM ; fondamentalmente ciascuno di questi interessi ogli aspetti possono essere indipendenti gli uni dagli altri formando uno "spazio spaziale" multidimensionale. , (leggi questo ).
Alcune delle buone implementazioni pratiche di Aspect Oriented sono AspectJ e AspectC ++ e molte altre . Vedere questo .
3. Programmazione orientata al ruolo
Mentre ci evolviamo verso gli agenti, molte volte è necessario definire "ruoli" e obiettivi in cui le attività esatte che l'agente finisce per svolgere dipendono dall'ambiente in cui si trova. Ciò è analogo alla comprensione concettuale umana.
L'obiettivo principale è quello di separare l'obiettivo del compito 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 modellizzazione dell'ambiente di esecuzione e il modo in cui l'agente / oggetto può percepire anche l'ambiente. Vedere questo .
Esistono vari framework proposti nella ricerca per la modellizzazione e le implementazioni basate sui ruoli. Alcuni di essi sono ROPE , BRAIN , ALAADIN e altri .