# HG changeset patch # User David Bateman # Date 1224099322 -3600 # Node ID 06094fa570a381768bd52b2343bfe0f03f6a31a1 # Parent 4e05ba66ead27b23c061e21e320563c144c04c39 Add some documentation for the OOP code of Octave diff -r 4e05ba66ead2 -r 06094fa570a3 ChangeLog --- a/ChangeLog Wed Oct 15 14:19:33 2008 -0400 +++ b/ChangeLog Wed Oct 15 20:35:22 2008 +0100 @@ -1,3 +1,18 @@ +2008-10-15 David Bateman + + * examples/polynomial/display.m, examples/polynomial/double.m, + examples/polynomial/end.m, examples/polynomial/get.m, + examples/polynomial/mtimes.m, examples/polynomial/plot.m, + examples/polynomial/polynomial.m, + examples/polynomial/polynomial_superiorto.m, + examples/polynomial/polyval.m, examples/polynomial/set.m, + examples/polynomial/subsasgn.m, examples/polynomial/subsref.m: + New example files for a sample OOP class. + * examples/polynomial/Makefile.in: Add a makefile for this new + directory + * examples/Makefile.in: Reference the new subdirectory here. + * configure.in: Add the new makefile to AC_CONFIG_FILES. + 2008-10-01 Jaroslav Hajek * configure.in: Check for sizeof (long double) and randl. diff -r 4e05ba66ead2 -r 06094fa570a3 configure.in --- a/configure.in Wed Oct 15 14:19:33 2008 -0400 +++ b/configure.in Wed Oct 15 20:35:22 2008 +0100 @@ -1989,9 +1989,9 @@ AC_CONFIG_FILES([Makefile octMakefile Makeconf test/Makefile doc/Makefile doc/faq/Makefile doc/interpreter/Makefile doc/liboctave/Makefile doc/refcard/Makefile emacs/Makefile - examples/Makefile liboctave/Makefile liboctave/oct-types.h - src/Makefile src/mxarray.h libcruft/Makefile libcruft/Makerules - libcruft/amos/Makefile libcruft/blas/Makefile + examples/Makefile examples/polynomial/Makefile liboctave/Makefile + liboctave/oct-types.h src/Makefile src/mxarray.h libcruft/Makefile + libcruft/Makerules libcruft/amos/Makefile libcruft/blas/Makefile libcruft/daspk/Makefile libcruft/dasrt/Makefile libcruft/dassl/Makefile libcruft/fftpack/Makefile libcruft/lapack/Makefile libcruft/minpack/Makefile diff -r 4e05ba66ead2 -r 06094fa570a3 doc/ChangeLog --- a/doc/ChangeLog Wed Oct 15 14:19:33 2008 -0400 +++ b/doc/ChangeLog Wed Oct 15 20:35:22 2008 +0100 @@ -1,4 +1,16 @@ +2008-10-15 David Bateman + + * interpreter/oop.txi: New file. + * interpreter/Makefile.in (SUB_SOURCES): Add it here. + (POLYNOMIAL_FILES_NODIR): New varaible for polynomial example class + methods. + (EXAMPLE_FILES_NODIR): Add POLYNOMIAL_FILES_NODIR here. + * interpreter/octave.texi: Reference new OOP chapter here. + * interpreter/func.txi: Document private directories and function + precedence here. + 2008-10-03 Thorsten Meyer + * interpreter/contrib.txi: added example for mercurial queues 08-10-03 Thorsten Meyer diff -r 4e05ba66ead2 -r 06094fa570a3 doc/interpreter/Makefile.in --- a/doc/interpreter/Makefile.in Wed Oct 15 14:19:33 2008 -0400 +++ b/doc/interpreter/Makefile.in Wed Oct 15 20:35:22 2008 +0100 @@ -33,6 +33,20 @@ SCRIPT_SOURCES = sparseimages.m interpimages.m geometryimages.m plotimages.m +POLYNOMIAL_FILES_NODIR = \ + display.m \ + double.m \ + end.m \ + get.m \ + mtimes.m \ + plot.m \ + polynomial.m \ + polynomial_superiorto.m \ + polyval.m \ + set.m \ + subsasgn.m \ + subsref.m + EXAMPLE_FILES_NODIR = \ addtwomatrices.cc \ celldemo.cc \ @@ -52,7 +66,8 @@ paramdemo.cc \ stringdemo.cc \ structdemo.cc \ - unwinddemo.cc + unwinddemo.cc \ + $(addprefix polynomial/, $(POLYNOMIAL_FILES_NODIR)) EXAMPLE_FILES = $(addprefix $(top_srcdir)/examples/, $(EXAMPLE_FILES_NODIR)) @@ -99,7 +114,7 @@ expr.txi fn-idx.txi func.txi geometry.txi gpl.txi \ grammar.txi image.txi install.txi interp.txi \ intro.txi io.txi linalg.txi matrix.txi nonlin.txi numbers.txi \ - op-idx.txi optim.txi package.txi plot.txi poly.txi preface.txi \ + oop.txi op-idx.txi optim.txi package.txi plot.txi poly.txi preface.txi \ quad.txi set.txi signal.txi sparse.txi stats.txi \ stmt.txi strings.txi system.txi testfun.txi tips.txi var.txi \ vr-idx.txi diff -r 4e05ba66ead2 -r 06094fa570a3 doc/interpreter/func.txi --- a/doc/interpreter/func.txi Wed Oct 15 14:19:33 2008 -0400 +++ b/doc/interpreter/func.txi Wed Oct 15 20:35:22 2008 +0100 @@ -625,8 +625,10 @@ @menu * Manipulating the load path:: * Subfunctions:: +* Private Functions:: * Overloading and Autoloading:: * Function Locking:: +* Function Precedence:: @end menu @node Manipulating the load path @@ -700,6 +702,34 @@ function @code{f} or from the other subfunctions, but not from outside the file @file{f.m}. +@node Private Functions +@subsection Private Functions + +In many cases one function needs to access one or more helper +functions. If the helper function is limited to the scope of a single +function, then subfunctions as discussed above might be used. However, +if a single helper function is used by more than one function, then +this is no longer possible. In this case the helper functions might +be placed in a subdirectory, called "private", of the directory in which +the functions needing access to this helper function are found. + +As a simple example, consider a function @code{func1}, that calls a helper +function @code{func2} to do much of the work. For example + +@example +@group +function y = func1 (x) + y = func2 (x); +endfunction +@end group +@end example + +@noindent +Then if the path to @code{func1} is @code{/func1.m}, and if +@code{func2} is found in the directory @code{/private/func2.m}, +then @code{func2} is only available for use of the functions, like +@code{func1}, that are found in @code{}. + @node Overloading and Autoloading @subsection Overloading and Autoloading @@ -826,6 +856,49 @@ @DOCSTRING(mislocked) +@node Function Precedence +@subsection Function Precedence + +Given the numereous different ways that Octave can define a function, it +is possible and even likely that multiple versions of a function, might be +defined within a particular scope. The precedence of which function will be +used within a particular scope is given by + +@enumerate 1 +@item Subfunction +A subfunction with the required function name in the given scope. + +@item Private function +A function defined within a private directory of the directory +which contains the current function. + +@item Class constructor +A function that constuctors a user class as defined in chapter +@ref{Object Oriented Programming}. + +@item Class method +An overloaded function of a class as in chapter +@ref{Object Oriented Programming}. + +@item Legacy Dispatch +An overloaded function as defined by @xref{dispatch}. + +@item Command-line Function +A function that has been defined on the command-line. + +@item Autoload function +A function that is marked as autoloaded with @xref{autoload}. + +@item A Function on the Path +A function that can be found on the users load-path. There can also be +Oct-file, mex-file or m-file versions of this function and the precedence +between these versions are in that order. + +@item Built-in function +A function that is builtin to Octave itself such as @code{numel}, +@code{size}, etc. +@end enumerate + @node Script Files @section Script Files diff -r 4e05ba66ead2 -r 06094fa570a3 doc/interpreter/octave.texi --- a/doc/interpreter/octave.texi Wed Oct 15 14:19:33 2008 -0400 +++ b/doc/interpreter/octave.texi Wed Oct 15 20:35:22 2008 +0100 @@ -177,6 +177,7 @@ * Signal Processing:: * Image Processing:: * Audio Processing:: +* Object Oriented Programming:: * System Utilities:: * Packages:: * Dynamically Linked Functions:: @@ -487,6 +488,13 @@ * Plotting on top of Images:: * Color Conversion:: +Object Oriented Programming + +* Creating a Class: +* Manipulating Classes:: +* Indexing Objects:: +* Overloading Objects:: + System Utilities * Timing Utilities:: @@ -600,6 +608,7 @@ @include signal.texi @include image.texi @include audio.texi +@include oop.texi @include system.texi @include package.texi diff -r 4e05ba66ead2 -r 06094fa570a3 examples/Makefile.in --- a/examples/Makefile.in Wed Oct 15 14:19:33 2008 -0400 +++ b/examples/Makefile.in Wed Oct 15 20:35:22 2008 +0100 @@ -34,6 +34,10 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_DATA = @INSTALL_DATA@ +SUBDIRS = polynomial + +DISTSUBDIRS = $(SUBDIRS) + SCRIPTS = info-emacs-info info-emacs-octave-help SOURCES = \ @@ -78,9 +82,13 @@ DISTSUBDIRS = -all: octave.desktop +all: $(SUBDIRS) octave.desktop .PHONY: all +$(SUBDIRS): + $(MAKE) -C $@ all +.PHONY: $(SUBDIRS) + octave.desktop: octave.desktop.in Makefile ../Makeconf echo "making $@ from $<" $(SED) < $< > $@-t \ @@ -134,4 +142,5 @@ dist: ln $(DISTFILES) ../`cat ../.fname`/examples + for dir in $(DISTSUBDIRS); do mkdir ../`cat ../.fname`/scripts/$$dir; $(MAKE) -C $$dir $@; done .PHONY: dist diff -r 4e05ba66ead2 -r 06094fa570a3 scripts/ChangeLog --- a/scripts/ChangeLog Wed Oct 15 14:19:33 2008 -0400 +++ b/scripts/ChangeLog Wed Oct 15 20:35:22 2008 +0100 @@ -1,3 +1,8 @@ +2008-10-15 David Bateman + + * general/colon.m: Small typo. + * general/loadobj.m: Ditto. + 2008-10-14 Ben Abbott * plot/__go_draw_axes__.m (do_tics_1): New args, fontname and fontsize. diff -r 4e05ba66ead2 -r 06094fa570a3 scripts/general/colon.m --- a/scripts/general/colon.m Wed Oct 15 14:19:33 2008 -0400 +++ b/scripts/general/colon.m Wed Oct 15 20:35:22 2008 +0100 @@ -27,6 +27,7 @@ ## a = myclass (@dots{}) ## b = myclass (@dots{}) ## c = a : b +## @end group ## @end example ## ## @seealso{class, subsref, subsasgn} diff -r 4e05ba66ead2 -r 06094fa570a3 scripts/general/loadobj.m --- a/scripts/general/loadobj.m Wed Oct 15 14:19:33 2008 -0400 +++ b/scripts/general/loadobj.m Wed Oct 15 20:35:22 2008 +0100 @@ -18,7 +18,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} {@var{b} =} loadobj (@var{a}) -## Methof of a class to manipulate an object after loading it tfrom a file. +## Method of a class to manipulate an object after loading it tfrom a file. ## The function @code{loadobj} is called when the object @var{a} is loaded ## using the @code{load} function. An example of the use of @code{saveobj} ## might be to add fields to an object that don't make sense to be saved.