Search This Blog

Saturday, October 1, 2011

A Guide to MATLAB Object-Oriented Programming - Andy H. Register

A Guide to MATLAB Object-Oriented Programming - Andy H. Register pdf



Chapter 1
Introduction......................................1
1.1 Examples..............................2
1.2 Object-Oriented Software Development ................2
1.2.1 At the Top of Your Game.........3
1.2.2 Personal Development....................3
1.2.3 Wicked Problems.............................5
1.2.4 Extreme Programming.......................................6
1.2.5 MATLAB, Object-Oriented Programming, and You ..............8
1.3 Attributes, Behavior, Objects, and Classes .............................9
1.3.1 From MATLAB Heavyweight to Object-Oriented Thinker ....................9
1.3.2 Object-Oriented Design..............................................10
1.3.3 Why Use Objects?.......................................11
1.3.4 A Quality Focus .........................................................................................................12
1.3.4.1 Reliability...................................................................................................12
1.3.4.2 Reusability .................................................................................................13
1.3.4.3 Extendibility...............................................................................................14
1.4 Summary................................................................................................................................15
PART 1
Group of Eight ........................................................ 17
Chapter 2
Meeting MATLAB’s Requirements ...........................................................................19
2.1 Variables, Types, Classes, and Objects ..................................................................................19
2.2 What Is a MATLAB Class? ...................................................................................................21
2.2.1 Example: Class Requirements....................................................................................21
2.2.1.1 Class Directory ..........................................................................................22
2.2.1.2 Constructor.................................................................................................22
2.2.1.3 The Test Drive ...........................................................................................24
2.3 Summary................................................................................................................................26
2.4 Independent Investigations .....................................................................................................27
Chapter 5
Displaying an Object’s State ......................................................................................77
5.1 Displaying Objects .................................................................................................................77
5.1.1 What Should Be Displayed? ......................................................................................77
5.1.2 Standard Structure Display ........................................................................................79
5.1.3 Public Member Variable Display ...............................................................................80
5.1.3.1 Implementing display.m, Attempt 1 ..........................................................80
5.1.3.2 Implementing display.m, Attempt 2 ..........................................................81
5.2 Developer View ......................................................................................................................83
5.2.1 Implementing display.m with Developer View Options............................................84
5.3 The Test Drive ........................................................................................................................86
5.4 Summary................................................................................................................................88
5.5 Independent Investigations .....................................................................................................88
Chapter 6
fieldnames.m...............................................................................................................91
6.1 fieldnames..............................................................................................................................91
6.2 Code Development .................................................................................................................91
6.3 The Test Drive ........................................................................................................................93
6.4 Summary................................................................................................................................93
6.5 Independent Investigations .....................................................................................................94
Chapter 7
struct.m .......................................................................................................................95
7.1 struct ......................................................................................................................................95
7.2 Code Development .................................................................................................................96
7.3 The Test Drive ........................................................................................................................97
7.4 Summary................................................................................................................................98
7.5 Independent Investigations .....................................................................................................98
Chapter 8
get.m, set.m ................................................................................................................99
8.1 Arguments for the Member Functions get and set................................................................99
8.1.1 For Developers............................................................................................................99
8.1.2 For Clients ................................................................................................................100
8.1.3 Tab Completion ........................................................................................................101
8.2 Code Development ...............................................................................................................101
8.2.1 Implementing get and set .........................................................................................102
8.2.2 Initial get.m...............................................................................................................104
8.2.3 Initial set.m ...............................................................................................................107
8.3 The Test Drive ......................................................................................................................110
8.4 Summary..............................................................................................................................111
8.5 Independent Investigations ...................................................................................................112
Chapter 9
Simplify Using get, set, fieldnames, and struct .......................................................113
9.1 Improving subsref.m.............................................................................................................114
9.2 Improving subsasgn.m..........................................................................................................115
9.3 Improving display.m.............................................................................................................116
9.4 Test Drive.............................................................................................................................118
9.5 Summary..............................................................................................................................121
9.6 Independent Investigations ...................................................................................................122
Chapter 10
Drawing a Shape ......................................................................................................123
10.1 Ready, Set, Draw..................................................................................................................123
10.1.1 Implementation .........................................................................................................123
10.1.1.1 Modify the Constructor ...........................................................................124
10.1.1.2 Modify fieldnames...................................................................................125
10.1.1.3 Modify get ...............................................................................................125
10.1.1.4 Modify set................................................................................................128
10.1.1.5 Modify mtimes ........................................................................................131
10.1.1.6 Modify reset.............................................................................................132
10.1.1.7 Adding Member Function draw..............................................................132
10.2 Test Drive.............................................................................................................................133
10.3 Summary..............................................................................................................................136
10.4 Independent Investigations ...................................................................................................137
PART 2
Building a Hierarchy ............................................. 139
Chapter 11
Constructor Redux....................................................................................................141
11.1 Specifying Initial Values ......................................................................................................141
11.1.1 Private Member Functions .......................................................................................142
11.2 Generalizing the Constructor ...............................................................................................143
11.2.1 Constructor Helper /private/ctor_ini.m ....................................................................145
11.2.2 Constructor Helper Example /private/ctor_1.m .......................................................146
11.3 Test Drive.............................................................................................................................147
11.4 Summary..............................................................................................................................150
11.5 Independent Investigations ...................................................................................................151
Chapter 12
Constructing Simple Hierarchies with Inheritance..................................................153
12.1 Simple Inheritance................................................................................................................154
12.1.1 Constructor ...............................................................................................................154
12.1.2 Other Standard Member Functions..........................................................................157
12.1.2.1 Child Class fieldnames ............................................................................161
12.1.2.2 Child Class get.........................................................................................162
12.1.2.3 Child Class set .........................................................................................165
12.1.3 Parent Slicing in Nonstandard Member Functions..................................................167
12.1.3.1 draw.m......................................................................................................168
12.1.3.2 mtimes.m..................................................................................................168
12.1.3.3 reset.m......................................................................................................169
12.2 Test Drive.............................................................................................................................169
12.3 Summary..............................................................................................................................173
12.4 Independent Investigations ...................................................................................................174
Chapter 13
Object Arrays with Inheritance ................................................................................175
13.1 When Is a cShape Not a cShape?........................................................................................175
13.1.1 Changes to subsasgn ................................................................................................176
13.1.2 vertcat and horzcat ...................................................................................................177
13.1.3 Test Drive..................................................................................................................178
13.2 Summary..............................................................................................................................182
13.3 Independent Investigations ...................................................................................................182
Chapter 14
Child-Class Members ...............................................................................................183
14.1 Function Redefinition ...........................................................................................................183
14.1.1 /@cStar/private/ctor_ini.m with Private Member Variables ....................................184
14.1.2 /@cStar/fieldnames.m with Additional Public Members ........................................184
14.1.3 /@cStar/get.m with Additional Public Members.....................................................185
14.1.4 /@cStar/set.m with Additional Public Members .....................................................186
14.1.5 /@cStar/draw.m with a Title ....................................................................................187
14.2 Test Drive.............................................................................................................................187
14.3 Summary..............................................................................................................................189
14.4 Independent Investigations ...................................................................................................190
Chapter 15
Constructing Simple Hierarchies with Composition ...............................................191
15.1 Composition.........................................................................................................................191
15.1.1 The cLineStyle Class................................................................................................192
15.1.1.1 cLineStyle’s private/ctor_ini....................................................................193
15.1.1.2 cLineStyle’s fieldnames...........................................................................194
15.1.1.3 cLineStyle’s get .......................................................................................195
15.1.1.4 cLineStyle’s set........................................................................................196
15.1.1.5 cLineStyle’s private/ctor_2 ......................................................................197
15.1.2 Using a Primary cShape and a Secondary cLineStyle ............................................198
15.1.2.1 Composition Changes to cShape’s ctor_ini.m ........................................199
15.1.2.2 Adding LineWeight to cShape’s fieldnames.m.......................................199
15.1.2.3 Composition Changes to cShape’s get.m................................................200
15.1.2.4 Composition Changes to cShape’s set.m ................................................201
15.1.2.5 Composition Changes to cShape’s draw.m.............................................202
15.1.2.6 Composition Changes to cShape’s Other Member Functions................202
15.2 Test Drive.............................................................................................................................203
15.3 Summary..............................................................................................................................204
15.4 Independent Investigations ...................................................................................................206
Chapter 16
General Assignment and Mutator Helper Functions ...............................................209
16.1 Helper Function Strategy .....................................................................................................209
16.1.1 Direct-Link Public Variables ....................................................................................210
16.1.1.1 get and subsref.........................................................................................210
16.1.1.2 set and subsasgn ......................................................................................211
16.1.2 get and set Helper Functions....................................................................................212
16.1.2.1 Helper functions, get, and set..................................................................212
16.1.2.2 Final template for get.m ..........................................................................213
16.1.2.3 Final Template for set.m..........................................................................217
16.1.2.4 Color Helper Function.............................................................................221
16.1.2.5 The Other Classes and Member Functions.............................................222
16.2 Test Drive.............................................................................................................................222
16.3 Summary..............................................................................................................................223
16.4 Independent Investigations ...................................................................................................224
Chapter 17
Class Wizard.............................................................................................................225
17.1 File Dependencies ................................................................................................................226
17.2 Data-Entry Dialog Boxes .....................................................................................................226
17.2.1 Main Class Wizard Dialog .......................................................................................227
17.2.1.1 Header Information Dialog .....................................................................229
17.2.1.2 Parents … Dialog ....................................................................................231
17.2.1.3 Private Variable … Dialog.......................................................................232
17.2.1.4 Concealed Variables … Dialog ...............................................................234
17.2.1.5 Public Variables … Dialog ......................................................................235
17.2.1.6 Constructors … Dialog............................................................................237
17.2.1.7 More … Dialog .......................................................................................238
17.2.1.8 Static Variables … Dialog .......................................................................239
17.2.1.9 Private Functions … Dialog ....................................................................240
17.2.1.10 Public Functions … Dialog.....................................................................242
17.2.1.11 File Menu.................................................................................................243
17.2.1.12 Data Menu ...............................................................................................244
17.2.1.13 Build Class Files Button..........................................................................245
17.3 Summary..............................................................................................................................246
17.4 Independent Investigations ...................................................................................................247
Chapter 18
Class Wizard Versions of the Shape Hierarchy .......................................................249
18.1 cLineStyle Class Wizard Definition Data ............................................................................249
18.1.1 cLineStyle Header Info ............................................................................................250
18.1.2 cLineStyle Private Variables.....................................................................................251
18.1.3 cLineStyle Public Variables......................................................................................253
18.1.4 cLineStyle Constructor Functions............................................................................255
18.1.5 cLineStyle Data Dictionary......................................................................................257
18.1.6 cLineStyle Build Class Files....................................................................................258
18.1.7 cLineStyle Accessor and Mutator Helper Functions ...............................................259
18.2 cShape Class Wizard Definition Data..................................................................................261
18.2.1 cShape Header Info ..................................................................................................261
18.2.2 cShape Private Variables ..........................................................................................261
18.2.3 cShape Concealed Variables.....................................................................................262
18.2.4 cShape Public Variables ...........................................................................................263
18.2.5 cShape Constructor Functions..................................................................................264
18.2.6 cShape Public Functions ..........................................................................................265
18.2.7 cShape Data Dictionary............................................................................................265
18.2.8 cShape Build Class Files..........................................................................................266
18.3 cStar Class Wizard Definition Data .....................................................................................268
18.3.1 cStar Parent...............................................................................................................268
18.3.2 Other cStar Definition Data .....................................................................................269
18.4 cDiamond Class Wizard Definition Data.............................................................................271
18.5 Test Drive.............................................................................................................................271
18.6 Summary..............................................................................................................................272
18.7 Independent Investigations ...................................................................................................275
PART 3
Advanced Strategies .............................................. 277
Chapter 19
Composition and a Simple Container Class ............................................................279
19.1 Building Containers..............................................................................................................279
19.2 Container Implementation ....................................................................................................280
19.2.1 The Standard Framework and the Group of Eight ..................................................280
19.2.1.1 Container Modifications to fieldnames ...................................................281
19.2.1.2 Container Modifications to subsref .........................................................283
19.2.1.3 Container Modifications to subsasgn ......................................................285
19.2.1.4 Container Modifications to get................................................................287
19.2.1.5 Container Modifications to set ................................................................289
19.2.2 Tailoring Built-In Behavior ......................................................................................290
19.2.2.1 Container-Tailored end ............................................................................291
19.2.2.2 Container-Tailored cat, horzcat, vertcat ..................................................291
19.2.2.3 Container-Tailored length, ndims, reshape, and size ..............................293
19.2.3 cShapeArray and numel ...........................................................................................294
19.2.3.1 Container-Tailored num2cell and mat2cell .............................................295
19.2.4 Container Functions That Are Specific to cShape Objects .....................................296
19.2.4.1 cShapeArray times and mtimes...............................................................296
19.2.4.2 cShapeArray draw ...................................................................................298
19.2.4.3 cShapeArray reset....................................................................................299
19.3 Test Drive.............................................................................................................................299
19.4 Summary..............................................................................................................................302
19.5 Independent Investigations ...................................................................................................302
Chapter 20
Static Member Data and Singleton Objects.............................................................303
20.1 Adding Static Data to Our Framework................................................................................303
20.1.1 Hooking Static Data into the Group of Eight..........................................................304
20.1.1.1 Static Variables and the Constructor .......................................................305
20.1.1.2 Static Variables in get and set .................................................................305
20.1.1.3 Static Variables in display .......................................................................306
20.1.2 Overloading loadobj and saveobj.............................................................................307
20.1.3 Counting Assignments..............................................................................................308
20.2 Singleton Objects..................................................................................................................308
20.3 Test Drive.............................................................................................................................309
20.4 Summary..............................................................................................................................311
20.5 Independent Investigations ...................................................................................................312
Chapter 21
Pass-by-Reference Emulation ..................................................................................313
21.1 Assignment without Equal ...................................................................................................313
21.2 Pass-by-Reference Functions ...............................................................................................314
21.3 Pass-by-Reference Draw ......................................................................................................315
21.4 Pass-by-Reference Member Variable: View.........................................................................316
21.4.1 Helpers, get, and subsref with Pass-by-Reference Behavior...................................316
21.4.1.1 Pass-by-Reference Behavior in the Helper .............................................317
21.4.1.2 Pass-by-Reference Code in get.m ...........................................................318
21.4.1.3 Pass-by-Reference Code in subsref.m.....................................................321
21.5 Test Drive.............................................................................................................................322
21.6 Summary..............................................................................................................................324
21.7 Independent Investigations ...................................................................................................324
Chapter 22
Dot Functions and Functors .....................................................................................327
22.1 When Dot-Reference Is Not a Reference ............................................................................327
22.2 When Array-Reference Is Not a Reference .........................................................................332
22.2.1 Functors ....................................................................................................................333
22.2.2 Functor Handles........................................................................................................334
22.2.3 Functor feval.............................................................................................................335
22.2.4 Additional Remarks Concerning Functors...............................................................335
23.3 Test Drive.............................................................................................................................336
22.4 Summary..............................................................................................................................337
22.5 Independent Investigations ...................................................................................................337
Chapter 23
Protected Member Variables and Functions ............................................................339
23.1 How Protected Is Different from Other Visibilities.............................................................339
23.2 Class Elements for Protected ...............................................................................................339
23.2.1 Protected Functions and Advanced Function Handle Techniques ..........................340
23.2.2 Passing Protected Handles from Parent to Child ....................................................340
23.2.3 Accessing and Mutating Protected Variables...........................................................341
23.2.4 Calling Protected Functions .....................................................................................343
23.3 Test Drive.............................................................................................................................344
23.4 Summary..............................................................................................................................345
23.5 Independent Investigations ...................................................................................................346
Chapter 24
Potpourri for $100 ....................................................................................................347
24.1 A Small Assortment of Useful Commands .........................................................................347
24.1.1 objectdirectory ..........................................................................................................347
24.1.2 methods and methodsview .......................................................................................347
24.1.3 functions ...................................................................................................................348
24.2 Other Functions You Might Want to Overload....................................................................348
24.2.1 Functions for Built-in Types ....................................................................................348
24.2.2 subsindex ..................................................................................................................349
24.2.3 isfield........................................................................................................................349
24.3 Summary..............................................................................................................................350
24.4 Independent Investigations ...................................................................................................350
Index


Download

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...