Classdef: Difference between revisions

Jump to navigation Jump to search
3,929 bytes added ,  12 November 2020
→‎Lower-priority issues: Remove fixed entries.
(function handles in OOP context)
(→‎Lower-priority issues: Remove fixed entries.)
(55 intermediate revisions by 9 users not shown)
Line 1: Line 1:
This page is a stub. We should begin documenting what classdef is implemented and what is not.
=== Supported Features ===


==== not supported ====
==== Properties ====


* enumeration
Classdef properties are supported but not all attributes are implemented.


* build-in class as superclass
{| class="wikitable"
** <source lang="octave" enclose="none">classdef nonsense < uint32</source>
|-
! 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.
|}


* array of objects. Example:
==== Methods ====
<source lang="octave">
classdef MyClass < handle
end


c = MyClass();
Classdef methods are supported but not all attributes are fully implemented.
cc = [c, c];  % won't work
</source>


For now you can use a cell-array of objects instead:
{| class="wikitable"
<source lang="octave">
|-
cc = {c, c};  % ok
! style="text-align:left;"| Attribute
</source>
! Support
! Notes
|-
|Abstract
|Partial
|See bug report {{bug|51377}}
|-
|Access
|Yes
|
|-
|Hidden
|Yes
|
|-
|Sealed
|Yes
|
|-
|Static
|Yes
|
|}


* [http://www.mathworks.com/help/releases/R2015a/matlab/matlab_oop/mutable-and-immutable-properties.html Immutable property] set access. Example:
=== Features that are not implemented ===
<source lang="octave">
classdef MyClass < handle
    properties (SetAccess = immutable)
        x
    end
    methods
        function obj = MyClass()
            x = rand();
        end
    end
end
</source>


Use "private" properties as workaround.
==== [https://www.mathworks.com/help/matlab/enumeration-classes.html enumeration] ====


* Function handles to package methods and static class methods.
* {{bug|44582}} Parse the enumeration section of a classdef definition but nothing is done with it.
For example if we have <code>+mypackage/myfunc.m</code>, creating a function handle as <code>fh = @mypackage.myfunc</code> won't work.
As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin{:})</code>.
Similarly for static class methods where <code>fh = @MyClass.myfunc</code> isn't yet supported.


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


* methods
* {{bug|56194}} Parse the events section of a classdef definition but nothing is done with it.
** static
** private


==== Classdef examples in the wild ====
==== [https://www.mathworks.com/help/matlab/matlab_oop/property-validator-functions.html Property Validation Functions] ====


* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m
=== Open Bug Reports for Other Issues ===
* https://github.com/markuman/go-redis
 
==== Issues with basic classdef functionality ====
 
* {{bug|51659}} Calling 'methods' on self causes syntax error
* {{bug|48682}} print_usage fails within classdef block
* {{bug|49434}} which returns "built-in function" for classdef m-file
* {{bug|48041}} classdef: `help myclass` messes up `help @myclass/method`
* {{bug|43047}} help() does not see classdef files
* {{bug|42620}} exist() does not use "class" argument
* {{bug|53874}} doc_cache_create doesnt handle classdef documentation
* {{bug|52096}} meta.class.fromName throws error when class name not found.
* {{bug|48693}} classdef subsref method is not called with correct nargout value
* {{bug|56006}} Object indexing: obj(1).property(end+1:n) - end is interpreted wrong
* {{bug|55983}} 'x(ix) = []' deletion syntax does not work for objects
* {{bug|55976}} cat, repmat, and reshape don't work for classdef objects
* {{bug|55961}} properties function does not preserve order
* {{bug|52582}} using static method to initialize property value fails
* {{bug|45833}} support load/save of classdef objects
 
==== Classdef and +package directories ====
 
* [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages
 
==== Arrays of classdef objects ====
 
* {{bug|44665}} error in concatenation of classdef objects
* {{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) ====
 
* {{bug|46451}} unable to set breakpoints within classdef classes
* {{bug|45404}} Breakpoints cannot be set in classdef methods or +package function files
 
==== Lower-priority issues ====
 
* {{bug|55488}} Invalid use of colon char as classdef function's argument when subsref is overwritten
* {{bug|54966}} Error when assigning array to an object implementing subsasgn() subscripted using "{}"
* {{bug|54028}} copy of non-handle class instance is not deep
* {{bug|53811}} cellfun does not find overloaded function with function name argument
* {{bug|52989}} classdef: missing error messages on multiply defined properties
* {{bug|52582}} Dependent constant properties in classdef errors: no such file
* {{bug|52123}} Indirect memory leak in cdef_manager::initialize ()
* {{bug|51285}} max_recursion_depth error in classdef constructor
* {{bug|50395}} subclassing a class that is also defined as a variable fails
* {{bug|50011}} failure to report error on conflicting methods for classdef
* {{bug|49379}} classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)
* {{bug|55810}} sizeof() and whos() returns 0 bytes for classdef objects
* {{bug|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
* {{bug|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)
* {{bug|44035}} unable to subclass built-in types
 
==== Documentation ====
 
* {{bug|50729}} Improve OOP documentation
* {{bug|47908}} Octave:classdef-to-struct not documented in warning_ids.m
* {{bug|44590}} More documentation for the current status of classdef implementation
 
=== Classdef examples in Octave ===
 
* [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]
 
[[Category:Development]]

Navigation menu