Classdef: Difference between revisions

From Octave
Jump to navigation Jump to search
No edit summary
 
(27 intermediate revisions by 5 users not shown)
Line 93: Line 93:
=== Features that are not implemented ===
=== Features that are not implemented ===


==== enumeration ====
==== [https://www.mathworks.com/help/matlab/enumeration-classes.html enumeration] ====


Octave should be able to parse the enumeration section of a classdef definition but nothing is done with it.  Progress on this feature is tracked in bug report {{bug|44582}}.
* {{bug|44582}} Parse the enumeration section of a classdef definition but nothing is done with it.


==== events and listeners ====
==== [https://www.mathworks.com/help/matlab/matlab_oop/learning-to-use-events-and-listeners.html events and listeners] ====


Octave should be able to parse the events section of a classdef definition but nothing is done with it.  Progress on this feature is tracked in bug report {{bug|56194}}.
* {{bug|56194}} Parse the events section of a classdef definition but nothing is done with it.


==== built-in class as superclass ====
==== [https://www.mathworks.com/help/matlab/matlab_oop/property-validator-functions.html Property Validation Functions] ====


Octave does not allow subclassing built-in classes.  In Matlab, classdef objects may subclass built-in integer, floating point, and logical types.  For example,
=== Open Bug Reports for Other Issues ===
<source lang="octave">
classdef nonsense < uint32
  ...
end
</source>
 
does not work.
 
Progress on this feature is tracked in bug report {{bug|44035}}.
 
==== concatenation of classdef objects ====
 
Octave does not support concatenation of classdef objects to create classdef array objects.
 
Example:
 
<source lang="octave">
classdef MyClass < handle
end
 
c = MyClass();
cc = [c, c];  % won't work
</source>
 
For now you can use a cell-array of objects instead:
<source lang="octave">
cc = {c, c};  % ok
</source>
 
Progress on this feature is tracked in bug reports {{bug|44665}} and {{bug|53906}}.
 
==== Saving and loading classdef objects ====
 
Saving and loading classdef objects is not supported.
 
Progress on this feature is tracked in bug report {{bug|45833}}
 
=== Open Bug Reports for Issues not Described Above ===


==== Issues with basic classdef functionality ====
==== Issues with basic classdef functionality ====


* [https://savannah.gnu.org/bugs/?51659 51659] Calling 'methods' on self causes syntax error
* {{bug|51659}} Calling 'methods' on self causes syntax error
* [https://savannah.gnu.org/bugs/?48682 48682] print_usage fails within classdef block
* {{bug|52096}} meta.class.fromName throws error when class name not found.
* [https://savannah.gnu.org/bugs/?49434 49434] which returns "built-in function" for classdef m-file
* {{bug|55983}} 'x(ix) = []' deletion syntax does not work for objects
* [https://savannah.gnu.org/bugs/?48041 48041] classdef: `help myclass` messes up `help @myclass/method`
* {{bug|55976}} cat, repmat, and reshape don't work for classdef objects
* [https://savannah.gnu.org/bugs/?43047 43047] help() does not see classdef files
* {{bug|55961}} properties function does not preserve order - <em>Patch submitted, awaiting review</em>
* [https://savannah.gnu.org/bugs/?42620 42620] exist() does not use "class" argument
* {{bug|52582}} using static method to initialize property value fails
* [https://savannah.gnu.org/bugs/?53874 53874] doc_cache_create doesnt handle classdef documentation
* {{bug|45833}} support load/save of classdef objects
* [https://savannah.gnu.org/bugs/?52096 52096] meta.class.fromName throws error when class name not found.
* {{bug|61676}} Assigning classdef objects to other types does not call converter methods
* [https://savannah.gnu.org/bugs/?48693 48693] classdef subsref method is not called with correct nargout value
* {{bug|60729}} print_usage within classdef constructor breaks subsequent calls to the class
* [https://savannah.gnu.org/bugs/?56006 56006] Object indexing: obj(1).property(end+1:n) - end is interpreted wrong
* [https://savannah.gnu.org/bugs/?55983 55983] 'x(ix) = []' deletion syntax does not work for objects
* [https://savannah.gnu.org/bugs/?55976 55976] cat, repmat, and reshape don't work for classdef objects
* [https://savannah.gnu.org/bugs/?55961 55961] properties function does not preserve order
* [https://savannah.gnu.org/bugs/?55768 55768] display of classdef object should not show private or protected properties
* [https://savannah.gnu.org/bugs/?55766 55766] properties function should not return Hidden properties
* [https://savannah.gnu.org/bugs/?55746 55746] interpreter fails to instantiate classdef with classdef properties
* [https://savannah.gnu.org/bugs/?52582 52582] using static method to initialize property value fails


==== Classdef and +package directories ====
==== Classdef and +package directories ====
Line 170: Line 123:
==== Arrays of classdef objects ====
==== Arrays of classdef objects ====


* [https://savannah.gnu.org/bugs/?47755 47755] Access to object arrays
* {{bug|44665}} error in concatenation of classdef objects
* [https://savannah.gnu.org/bugs/?47241 47241] classdef: assigning property of handle object in object array constructs new object
* {{bug|53906}} Cannot make an object array with square brackets
* {{bug|47755}} Access to object arrays
* {{bug|47241}} classdef: assigning property of handle object in object array constructs new object


==== Debugger (fixes for these are in progress) ====
==== Debugger (fixes for these are in progress) ====


* [https://savannah.gnu.org/bugs/?46451 46451] unable to set breakpoints within classdef classes
* {{bug|46451}} <s>unable to set breakpoints within classdef classes</s> - <em> Patch closed </em>
* [https://savannah.gnu.org/bugs/?45404 45404] Breakpoints cannot be set in classdef methods or +package function files
* {{bug|45404}} <s>Breakpoints cannot be set in classdef methods or +package function files</s> - <em>Report closed</em>
* {{bug|65610}} unable to set breakpoints within set or get functions of classdef classes - <em> Patch applied, ready for test </em>


==== Lower-priority issues ====
==== Lower-priority issues ====


* [https://savannah.gnu.org/bugs/?55488 55488] Invalid use of colon char as classdef function's argument when subsref is overwritten
* {{bug|55488}} Invalid use of colon char as classdef function's argument when subsref is overwritten
* [https://savannah.gnu.org/bugs/?54966 54966] Error when assigning array to an object implementing subsasgn() subscripted using "{}"
* {{bug|54966}} Error when assigning array to an object implementing subsasgn() subscripted using "{}"
* [https://savannah.gnu.org/bugs/?54028 54028] copy of non-handle class instance is not deep
* {{bug|54028}} copy of non-handle class instance is not deep
* [https://savannah.gnu.org/bugs/?53811 53811] cellfun does not find overloaded function with function name argument
* {{bug|53811}} cellfun does not find overloaded function with function name argument
* [https://savannah.gnu.org/bugs/?52989 52989] classdef: missing error messages on multiply defined properties
* {{bug|52989}} classdef: missing error messages on multiply defined properties
* [https://savannah.gnu.org/bugs/?52614 52614] setting properties of classdef object during construction with inheritance
* {{bug|52582}} Dependent constant properties in classdef errors: no such file
* [https://savannah.gnu.org/bugs/?52582 52582] Dependent constant properties in classdef errors: no such file
* {{bug|52123}} Indirect memory leak in cdef_manager::initialize ()
* [https://savannah.gnu.org/bugs/?52123 52123] Indirect memory leak in cdef_manager::initialize ()
* {{bug|51285}} max_recursion_depth error in classdef constructor
* [https://savannah.gnu.org/bugs/?51285 51285] max_recursion_depth error in classdef constructor
* {{bug|50395}} subclassing a class that is also defined as a variable fails
* [https://savannah.gnu.org/bugs/?50395 50395] subclassing a class that is also defined as a variable fails
* {{bug|50011}} failure to report error on conflicting methods for classdef
* [https://savannah.gnu.org/bugs/?50011 50011] failure to report error on conflicting methods for classdef
* {{bug|49379}} classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)
* [https://savannah.gnu.org/bugs/?49379 49379] classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)
* {{bug|55810}} sizeof() and whos() returns 0 bytes for classdef objects
* [https://savannah.gnu.org/bugs/?55810 55810] sizeof() and whos() returns 0 bytes for classdef objects
* {{bug|45893}} classdef properties are not reloaded when file is updated
* [https://savannah.gnu.org/bugs/?45893 45893] classdef properties are not reloaded when file is updated
* {{bug|44643}} classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential
* [https://savannah.gnu.org/bugs/?44643 44643] classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential
* {{bug|55755}} mxGetProperty does not work with properties marked as Dependent
* [https://savannah.gnu.org/bugs/?55755 55755] mxGetProperty does not work with properties marked as Dependent
* {{bug|55767}} classdef property should not be the same as classdef name (at least for Matlab compatibility)
* [https://savannah.gnu.org/bugs/?55767 55767] classdef property should not be the same as classdef name (at least for Matlab compatibility)
* {{bug|44035}} unable to subclass built-in types
* {{bug|62432}} classdef object display of boolean matrix property fails with error message


==== Documentation ====
==== Documentation ====


* [https://savannah.gnu.org/bugs/?50729 50729] Improve OOP documentation
* {{bug|50729}} Improve OOP documentation
* [https://savannah.gnu.org/bugs/?47908 47908] Octave:classdef-to-struct not documented in warning_ids.m
* {{bug|47908}} Octave:classdef-to-struct not documented in warning_ids.m
* [https://savannah.gnu.org/bugs/?44590 44590] More documentation for the current status of classdef implementation
* {{bug|44590}} More documentation for the current status of classdef implementation
 
=== Classdef examples in Octave ===


=== Classdef examples in the wild ===
* [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/miscellaneous/inputParser.m inputParser.m]
* [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/web/weboptions.m weboptions.m]
* [https://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/%2Bcontainers/Map.m +containers/Map.m]


* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m
[[Category:Development]]
* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/%2Bcontainers/Map.m
* https://github.com/markuman/go-redis
* https://github.com/PetrKryslUCSD/FinEALE

Latest revision as of 03:14, 23 November 2024

Supported Features[edit]

Properties[edit]

Classdef properties are supported but not all attributes are implemented.

Attribute Support Notes
AbortSet No Property does not exist.
Abstract Yes
Access Partial
Constant Yes
Dependent Partial
GetAccess Partial
GetObservable No Property exists but is not used. Requires events and listeners to be implemented in order to work properly.
Hidden Yes
NonCopyable No Property does not exist.
SetAccess Partial
SetObservable No Property exists but is not used. Requires events and listeners to be implemented in order to work properly.
Transient No Property exists but is not used.

Methods[edit]

Classdef methods are supported but not all attributes are fully implemented.

Attribute Support Notes
Abstract Partial See bug report #51377
Access Yes
Hidden Yes
Sealed Yes
Static Yes

Features that are not implemented[edit]

enumeration[edit]

  • #44582 Parse the enumeration section of a classdef definition but nothing is done with it.

events and listeners[edit]

  • #56194 Parse the events section of a classdef definition but nothing is done with it.

Property Validation Functions[edit]

Open Bug Reports for Other Issues[edit]

Issues with basic classdef functionality[edit]

  • #51659 Calling 'methods' on self causes syntax error
  • #52096 meta.class.fromName throws error when class name not found.
  • #55983 'x(ix) = []' deletion syntax does not work for objects
  • #55976 cat, repmat, and reshape don't work for classdef objects
  • #55961 properties function does not preserve order - Patch submitted, awaiting review
  • #52582 using static method to initialize property value fails
  • #45833 support load/save of classdef objects
  • #61676 Assigning classdef objects to other types does not call converter methods
  • #60729 print_usage within classdef constructor breaks subsequent calls to the class

Classdef and +package directories[edit]

  • 54941 interpreter cannot find methods in files of classdefs in packages

Arrays of classdef objects[edit]

  • #44665 error in concatenation of classdef objects
  • #53906 Cannot make an object array with square brackets
  • #47755 Access to object arrays
  • #47241 classdef: assigning property of handle object in object array constructs new object

Debugger (fixes for these are in progress)[edit]

  • #46451 unable to set breakpoints within classdef classes - Patch closed
  • #45404 Breakpoints cannot be set in classdef methods or +package function files - Report closed
  • #65610 unable to set breakpoints within set or get functions of classdef classes - Patch applied, ready for test

Lower-priority issues[edit]

  • #55488 Invalid use of colon char as classdef function's argument when subsref is overwritten
  • #54966 Error when assigning array to an object implementing subsasgn() subscripted using "{}"
  • #54028 copy of non-handle class instance is not deep
  • #53811 cellfun does not find overloaded function with function name argument
  • #52989 classdef: missing error messages on multiply defined properties
  • #52582 Dependent constant properties in classdef errors: no such file
  • #52123 Indirect memory leak in cdef_manager::initialize ()
  • #51285 max_recursion_depth error in classdef constructor
  • #50395 subclassing a class that is also defined as a variable fails
  • #50011 failure to report error on conflicting methods for classdef
  • #49379 classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)
  • #55810 sizeof() and whos() returns 0 bytes for classdef objects
  • #45893 classdef properties are not reloaded when file is updated
  • #44643 classdef handle object can go into an recursive loop with isequal(obj1,obj2) if both are self-referential
  • #55755 mxGetProperty does not work with properties marked as Dependent
  • #55767 classdef property should not be the same as classdef name (at least for Matlab compatibility)
  • #44035 unable to subclass built-in types
  • #62432 classdef object display of boolean matrix property fails with error message

Documentation[edit]

  • #50729 Improve OOP documentation
  • #47908 Octave:classdef-to-struct not documented in warning_ids.m
  • #44590 More documentation for the current status of classdef implementation

Classdef examples in Octave[edit]