Une classe décrit un ensemble d'objets ayant des propriétés communes. Les classes sont descriptives : elles fournissent un ensemble de conditions nécessaires mais non suffisantes d'appartenance des objets à la classe. Chaque classe est caractérisée par un ensemble de propriétés appelées variables (cet ensemble de propriétés défini l'intention de la classe). Les classes ne disposent pas de méthodes au sens des langages de programmation orientée objet.
Une variable correspond à une propriété dont le type n'est pas issu d'une classe de la base de connaissances. En effet, il n'existe pas de variable référençant un ou plusieurs objets ; il est nécessaire de passer par une association.
Chaque variable est caractérisée par un ensemble de facettes qui peut être subdivisé en trois catégories :
Les facettes de restriction du domaine des valeurs acceptées par la variable : ces facettes vont permettre de contraindre l'ensemble des valeurs admises par la variable en précisant par exemple le type des valeurs acceptées, ou les propriétés que doivent respecter ces valeurs pour être acceptées.
Les facettes d'inférence qui permettent d'inférer la valeur d'une variable lorsque celle-ci n'a pas été fixée dans l'objet. Parmis les moyens d'inférences utilisés, on peut citer la valeur par défaut fixée dans la classe pour toutes ses instances, l'équation du langage algébrique ou encore la méthode Java attachée à la variable chargée de calculer la valeur de celle-ci.
Les facettes de documentation qui permettent d'associer diverses informations à la variable.
Les classes sont structurées de manière hiérarchique par la relation de spécialisation qui, en AROM, est simple. La spécialisation d'une classe est réalisée par au moins une des deux opérations suivantes : ajout ou modification d'une valeur de facette ou ajout d'une nouvelle variable. Une classe hérite les facettes de variables qu'elle ne redéfinit pas. Par ailleurs, les sous-classes d'une classe ne sont pas supposées mutuellement exclusives (leurs descriptions peuvent englober des instances communes), ni exhaustives (l'union des ensembles d'instances des sous-classes n'est pas nécessairement égal à l'ensemble des instances de leur super-classe).
Un objet AROM représente une entité distinguable du domaine modélisé. Chaque objet est attaché à une classe mais appartient également à tous les ancêtres de cette classe. Le terme "attaché", utilisé dans le système TROEPS [Euz93], met en exergue la contingence et l'aspect dynamique du fait d'appartenir à une classe. Il reflète le fait que, contrairement à la programmation orientée objet, les SRCO comme AROM autorisent l'utilisateur ou un de ses programmes à déplacer un objet d'une classe vers une autre parce que des informations additionnelles ont été obtenues sur cet objet.