Changes

Jump to navigation Jump to search

Classdef

4,872 bytes added, 20 May
m
→‎Lower-priority issues: Update bug #52614.
This page is a stub. We should begin documenting what classdef is implemented and what is not.=== Supported Features ===
==== not supported Properties ====
* enumerationClassdef properties are supported but not all attributes are implemented.
* build-in {| class as superclass ** <source lang="octavewikitable" enclose|-! style="nonetext-align:left;">classdef nonsense < uint32</source>| 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.|}
* [http://www.mathworks.com/help/matlab/matlab_oop/redefining-concatenation-for-your-class.html concatenating objects] into [http://www.mathworks.com/help/matlab/matlab_oop/initialize-object-arrays.html array of objects]. Example:<source lang="octave">classdef MyClass < handleend=== Methods ====
c = MyClass();cc = [c, c]; % won't work</source>Classdef methods are supported but not all attributes are fully implemented.
For now you can use a cell{| class="wikitable"|-array of objects instead:<source lang! style="octavetext-align:left;">| Attribute! Support! Notes|-|Abstract|Partialcc = |See bug report {{c, cbug|51377}; % ok}|-|Access|Yes||-|Hidden|Yes||-|Sealed|Yes||-|Static|Yes|</source>|}
* [http://www.mathworks.com/help/matlab/matlab_oop/mutable-and-immutable-properties.html Immutable property] set access. Example:<source lang="octave">classdef MyClass < handle properties (SetAccess = immutable) x end methods function obj = MyClass() x Features that are not implemented === rand(); end endend</source>
Use "private" properties as workaround.==== enumeration ====
* Function handles Octave should be able to package methods and static class methods.For example if we have <code>+mypackage/myfunc.m</code>, creating parse the enumeration section of a function handle as <code>fh = @mypackageclassdef definition but nothing is done with it.myfunc</code> won't work.As a workaround, we can create an indirection using an anonymous function <code>fh = @(varargin) mypackage.myfunc(varargin Progress on this feature is tracked in bug report {{:bug|44582}})</code>.Similarly for static class methods where <code>fh = @MyClass.myfunc</code> isn't yet supported.
* Defining [http://www.mathworks.com/help/matlab/matlab_oop/specifying-methods-==== events and-functions.html#br2la89 local functions] in the same classdef-file is not working. For example, the following code gives a syntax/parse error:<source langlisteners ==="octave">classdef MyClass methods function obj = MyClass() myfunc() end endend
function myfunc() disp('myfunc')end</source>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}}.
==== supported =Open Bug Reports for Other Issues ===
* methods** static** private==== Issues with basic classdef functionality ====
* [https://savannah.gnu.org/bugs/?51659 51659] Calling 'methods' on self causes syntax error* [https://savannah.gnu.org/bugs/?48682 48682] print_usage fails within classdef block* [https://savannah.gnu.org/bugs/?49434 49434] which returns "built-in function" for classdef m-file* [https://savannah.gnu.org/bugs/?48041 48041] classdef: `help myclass` messes up `help @myclass/method`* [https://savannah.gnu.org/bugs/?43047 43047] help() does not see classdef files* [https://savannah.gnu.org/bugs/?42620 42620] exist() does not use "class" argument* [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/?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 ==== * [https://savannah.gnu.org/bugs/?54941 54941] interpreter cannot find methods in files of classdefs in packages ==== 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/?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 ==== Debugger (fixes for these are in progress) ==== * [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 ==== 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/?54966 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* [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* <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/?52123 52123] Indirect memory leak in cdef_manager::initialize ()* [https://savannah.gnu.org/bugs/?51285 51285] max_recursion_depth error in classdef constructor* [https://savannah.gnu.org/bugs/?50395 50395] subclassing a class that is also defined as a variable fails* [https://savannah.gnu.org/bugs/?50011 50011] failure to report error on conflicting methods for classdef* [https://savannah.gnu.org/bugs/?49379 49379] classdef constructor: .argn. loses first argument, inputname(n) returns inputname(n+1)* [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/?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/?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 ==== * [https://savannah.gnu.org/bugs/?50729 50729] Improve OOP documentation* [https://savannah.gnu.org/bugs/?47908 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 === Classdef examples in the wild ====
* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/general/inputParser.m
* http://hg.savannah.gnu.org/hgweb/octave/file/tip/scripts/%2Bcontainers/Map.m
* https://github.com/markuman/go-redis
* https://github.com/PetrKryslUCSD/FinEALE

Navigation menu