Classdef: Difference between revisions
Jump to navigation
Jump to search
(removed fixed bug reports: #45351 (function handles),) |
(→Features that are not implemented: Property Validation Functions and links) |
||
(16 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
=== Supported Features === | |||
=== | ==== Properties ==== | ||
Classdef properties are supported but not all attributes are implemented. | |||
{| class="wikitable" | |||
|- | |||
! style="text-align:left;"| 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 ==== | |||
Classdef methods are supported but not all attributes are fully implemented. | |||
{| class="wikitable" | |||
|- | |||
! style="text-align:left;"| Attribute | |||
! Support | |||
! Notes | |||
|- | |||
|Abstract | |||
|Partial | |||
|See bug report {{bug|51377}} | |||
|- | |||
|Access | |||
|Yes | |||
| | |||
|- | |||
|Hidden | |||
|Yes | |||
| | |||
|- | |||
|Sealed | |||
|Yes | |||
| | |||
|- | |||
|Static | |||
|Yes | |||
| | |||
|} | |||
=== Features that are not implemented === | |||
==== [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}}. | |||
classdef | |||
==== [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}}. | |||
==== [https://www.mathworks.com/help/matlab/matlab_oop/property-validator-functions.html Property Validation Functions] ==== | |||
=== Open Bug Reports for Other Issues === | |||
==== Issues with basic classdef functionality ==== | |||
Issues with basic classdef functionality | |||
* [https://savannah.gnu.org/bugs/?51659 51659] Calling 'methods' on self causes syntax error | * [https://savannah.gnu.org/bugs/?51659 51659] Calling 'methods' on self causes syntax error | ||
Line 103: | Line 115: | ||
* [https://savannah.gnu.org/bugs/?53874 53874] doc_cache_create doesnt handle classdef documentation | * [https://savannah.gnu.org/bugs/?53874 53874] doc_cache_create doesnt handle classdef documentation | ||
* [https://savannah.gnu.org/bugs/?52096 52096] meta.class.fromName throws error when class name not found. | * [https://savannah.gnu.org/bugs/?52096 52096] meta.class.fromName throws error when class name not found. | ||
* [https://savannah.gnu.org/bugs/?48693 48693] classdef subsref method is not called with correct nargout value | * [https://savannah.gnu.org/bugs/?48693 48693] classdef subsref method is not called with correct nargout value | ||
* [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 | |||
* [https://savannah.gnu.org/bugs/?45833 45833] support load/save of classdef objects | |||
Classdef and +package directories | ==== Classdef and +package directories ==== | ||
* [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages | * [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages | ||
Arrays of classdef objects | ==== Arrays of classdef objects ==== | ||
* [https://savannah.gnu.org/bugs/?44665 44665] error in concatenation of classdef objects | |||
* [https://savannah.gnu.org/bugs/?53906 53906] Cannot make an object array with square brackets | * [https://savannah.gnu.org/bugs/?53906 53906] Cannot make an object array with square brackets | ||
* [https://savannah.gnu.org/bugs/?47755 47755] Access to object arrays | * [https://savannah.gnu.org/bugs/?47755 47755] Access to object arrays | ||
* [https://savannah.gnu.org/bugs/?47241 47241] classdef: assigning property of handle object in object array constructs new object | * [https://savannah.gnu.org/bugs/?47241 47241] classdef: assigning property of handle object in object array constructs new object | ||
==== Debugger (fixes for these are in progress) ==== | |||
Debugger | |||
* [https://savannah.gnu.org/bugs/?46451 46451] unable to set breakpoints within classdef classes | * [https://savannah.gnu.org/bugs/?46451 46451] unable to set breakpoints within classdef classes | ||
* [https://savannah.gnu.org/bugs/?45404 45404] Breakpoints cannot be set in classdef methods or +package function files | * [https://savannah.gnu.org/bugs/?45404 45404] Breakpoints cannot be set in classdef methods or +package function files | ||
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 | * [https://savannah.gnu.org/bugs/?55488 55488] Invalid use of colon char as classdef function's argument when subsref is overwritten | ||
Line 134: | Line 149: | ||
* [https://savannah.gnu.org/bugs/?53811 53811] cellfun does not find overloaded function with function name argument | * [https://savannah.gnu.org/bugs/?53811 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 | * [https://savannah.gnu.org/bugs/?52989 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 | * <strike>[https://savannah.gnu.org/bugs/?52614 52614] setting properties of classdef object during construction with inheritance</strike> | ||
* [https://savannah.gnu.org/bugs/?52582 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 | ||
* [https://savannah.gnu.org/bugs/?52123 52123] Indirect memory leak in cdef_manager::initialize () | * [https://savannah.gnu.org/bugs/?52123 52123] Indirect memory leak in cdef_manager::initialize () | ||
Line 143: | Line 158: | ||
* [https://savannah.gnu.org/bugs/?55810 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 | ||
* [https://savannah.gnu.org/bugs/?45893 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 | ||
* [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 | * [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 | ||
* [https://savannah.gnu.org/bugs/?44035 44035] | * [https://savannah.gnu.org/bugs/?55755 55755] mxGetProperty does not work with properties marked as Dependent | ||
* [https://savannah.gnu.org/bugs/?55767 55767] classdef property should not be the same as classdef name (at least for Matlab compatibility) | |||
* [https://savannah.gnu.org/bugs/?44035 44035] unable to subclass built-in types | |||
Documentation | ==== Documentation ==== | ||
* [https://savannah.gnu.org/bugs/?50729 50729] Improve OOP documentation | * [https://savannah.gnu.org/bugs/?50729 50729] Improve OOP documentation |
Revision as of 06:30, 18 January 2020
Supported Features
Properties
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
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
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 #44582.
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 #56194.
Property Validation Functions
Open Bug Reports for Other Issues
Issues with basic classdef functionality
- 51659 Calling 'methods' on self causes syntax error
- 48682 print_usage fails within classdef block
- 49434 which returns "built-in function" for classdef m-file
- 48041 classdef: `help myclass` messes up `help @myclass/method`
- 43047 help() does not see classdef files
- 42620 exist() does not use "class" argument
- 53874 doc_cache_create doesnt handle classdef documentation
- 52096 meta.class.fromName throws error when class name not found.
- 48693 classdef subsref method is not called with correct nargout value
- 56006 Object indexing: obj(1).property(end+1:n) - end is interpreted wrong
- 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
- 55768 display of classdef object should not show private or protected properties
- 55766 properties function should not return Hidden properties
- 55746 interpreter fails to instantiate classdef with classdef properties
- 52582 using static method to initialize property value fails
- 45833 support load/save of classdef objects
Classdef and +package directories
- 54941 interpreter cannot find methods in files of classdefs in packages
Arrays of classdef objects
- 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)
- 46451 unable to set breakpoints within classdef classes
- 45404 Breakpoints cannot be set in classdef methods or +package function files
Lower-priority issues
- 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
52614 setting properties of classdef object during construction with inheritance- 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
Documentation
- 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