classdef ClassName
classdef ClassName < SuperClass
classdef ClassName < handle
classdef definit une classe valeur ou handle dans un fichier M.
Nelson prend en charge les proprietes, methodes, evenements, enumerations avec arguments de constructeur, enumerations basees sur des types scalaires numeriques, constantes, l'heritage, les proprietes handle dynamiques via dynamicprops, les methodes separees dans les dossiers @ClassName, les classes de paquet dans les dossiers +package et les declarations continuees avec ....
Les attributs de methode incluent Abstract, Access, Hidden, Sealed et Static. Les attributs de propriete incluent Abstract, Access, GetAccess, SetAccess, AbortSet, Constant, Dependent, GetObservable, SetObservable, Transient, NonCopyable, WeakHandle et les expressions de validation.
AbortSet ignore les notifications et le setter d'une propriete handle lorsque la valeur affectee est egale a la valeur stockee.
Les proprietes Transient sont exclues de struct et des donnees d'objet sauvegardees, puis rechargees avec leur valeur par defaut lorsqu'un constructeur par defaut est disponible. Les proprietes handle NonCopyable retrouvent leur valeur par defaut lors d'une copie via le mixin de copie.
Les proprietes WeakHandle d'une classe handle conservent leurs handles sans maintenir les objets references en vie : un objet qui n'a plus d'autre reference est detruit et la propriete renvoie alors un handle supprime de la meme classe. Elles servent aux references arriere (enfant vers parent, listener vers source) qui formeraient sinon un cycle de references, car les objets d'un cycle de references fortes ne sont jamais detruits. Une propriete WeakHandle doit declarer une validation de classe, par exemple Parent (1,1) Node, et ne peut pas etre Constant ni Dependent ; sans valeur par defaut, elle contient des handles supprimes de la classe et de la taille validees.
La validation de propriete prend en charge les dimensions fixes, les noms de type, les noms de fonctions de validation et les arguments de validation comme mustBeGreaterThan(0).
Les sous-classes handle peuvent definir des evenements. Les attributs d'evenement incluent Hidden, ListenAccess et NotifyAccess. Les attributs de classe incluent Abstract, ConstructOnLoad, Hidden, InferiorClasses et Sealed.
Les attributs d'acces acceptent public, private, protected, un nom de metaclasse comme ?FriendClass, ou une liste de classes comme {?FriendA, ?FriendB}.
Les methodes abstraites et les proprietes abstraites heritees doivent etre implementees par les sous-classes concretes, et les noms de membres herites en conflit sont signales lors de l'analyse de la classe.
Les proprietes abstraites peuvent etre combinees avec les attributs d'acces, de constante, de dependance, de masquage et de validation. Une declaration de propriete abstraite ne doit pas definir de valeur initiale.
Les methodes classdef peuvent acceder aux membres prives de leur classe et aux membres proteges des superclasses. Les membres publics sont retournes par methods, properties et events.
Les formes de methodes prises en charge incluent les constructeurs, methodes d'instance, methodes statiques, definitions simples de methodes sur une seule ligne, dispatch de methodes heritees, declarations scellees et abstraites, methodes externes dans les dossiers @ClassName, accesseurs nommes get.PropertyName et set.PropertyName, hooks d'indexation traditionnels nommes subsref, subsasgn et end, hooks simples d'indexation par point nommes dotReference et dotAssign, hooks simples d'indexation par parentheses parenReference et parenAssign pour les classes valeur et handle, hooks simples d'indexation par accolades nommes braceReference et braceAssign, methodes utilisateur delete pour les classes handle, copy via nelson.mixin.Copyable, et methodes protegees displayScalarObject via nelson.mixin.CustomDisplay.
Les methodes speciales de persistance saveObjectImpl et loadObjectImpl statique peuvent convertir les objets vers et depuis des structures sauvegardees. Elles sont appliquees aux objets scalaires et element par element pour les tableaux d'objets non vides.
Les tableaux d'objets classdef conservent les metadonnees de classe pendant l'affectation indexee. Les nouveaux elements de classe valeur utilisent le constructeur par defaut, et les nouveaux elements de classe handle recoivent des handles par defaut distincts. ClassName.empty(...) cree des tableaux d'objets vides types pour les classes valeur et handle.
Les classes handle qui heritent de dynamicprops peuvent ajouter des proprietes d'instance avec addprop(obj, name) et les supprimer avec rmprop(obj, name) ou delete(descriptor). Les proprietes dynamiques apparaissent dans isprop, properties, l'acces par champ d'objet et la conversion struct. Le descripteur renvoye par addprop est un handle meta.DynamicProperty.
Les objets classdef fonctionnent avec la sauvegarde/chargement, le debogueur, le profileur et la completion de Nelson. Les hooks de sauvegarde/chargement sont appliques element par element pour les tableaux d'objets, y compris les tableaux imbriques dans des cellules ou des structures. Les tableaux d'objets vides conservent leur classe et leurs dimensions apres sauvegarde et chargement. Les tableaux de handles sont verifies avant l'appel des hooks de sauvegarde afin de detecter les elements invalides.
Les classes d'enumeration numeriques comme classdef Mode < uint32 utilisent chaque argument de membre comme valeur numerique stockee, prennent en charge isa(member, 'uint32'), et exposent la conversion vers le type de base comme uint32(member).
metaclass expose les metadonnees de classe, propriete, methode, evenement et enumeration. Les metadonnees de propriete incluent les expressions de valeur par defaut, expressions de validation, classe de definition, modes d'acces, et indicateurs Constant, Dependent, Abstract, Hidden, GetObservable, SetObservable, AbortSet, Transient, NonCopyable et Dynamic. Les metadonnees de methode incluent la classe de definition, l'acces, et les indicateurs Static, Hidden, Sealed et Abstract. Les metadonnees d'evenement incluent ListenAccess, NotifyAccess, Hidden et les attributs bruts. Les metadonnees d'enumeration incluent les noms de membres, la classe de definition et les arguments de constructeur.
d = [tempdir(), 'nelson_help_classdef/'];
mkdir(d);
filewrite([d, '/NelsonHelpPoint.m'], ["classdef NelsonHelpPoint"; " properties"; " X = 0"; " Y = 0"; " end"; " methods"; " function obj = NelsonHelpPoint(x, y)"; " if nargin > 0"; " obj.X = x;"; " obj.Y = y;"; " end"; " end"; " end"; "end"]);
addpath(d);
p = NelsonHelpPoint(3, 4);
p.X
d = [tempdir(), 'nelson_help_classdef/'];
mkdir(d);
filewrite([d, '/NelsonHelpSavedValue.m'], ["classdef NelsonHelpSavedValue"; " properties"; " Value = 0"; " end"; " methods"; " function obj = NelsonHelpSavedValue(value)"; " if nargin > 0"; " obj.Value = value;"; " end"; " end"; " function data = saveObjectImpl(obj)"; " data = struct('Value', obj.Value);"; " end"; " end"; " methods (Static)"; " function obj = loadObjectImpl(data)"; " obj = NelsonHelpSavedValue(data.Value);"; " end"; " end"; "end"]);
addpath(d);
obj = NelsonHelpSavedValue(12);
data = obj.saveObjectImpl();
copy = NelsonHelpSavedValue.loadObjectImpl(data);
fileName = [tempdir(), 'nelson_help_classdef_object.nh5'];
save(fileName, 'obj');
clear obj;
load(fileName);
[copy.Value, obj.Value]
| Version | Description |
|---|---|
| 2.0.0 | version initiale |