CSC148H Summer 1996 Comments from the markers of Assignment 4. ------------------------------------------------------------------------- General Comments ================ The average of the day class is 64. About 1/4 of the programs are broken. About 5 of those that work correctly use the real O.O. approach. Students worked hard on this assignment. Even the program is not working, the report still contains the design and some testing strategies. As expected, a few people report fake testing results. Anyway, one wouldn't get a very low mark if his/her report is okay. Program ======= Definition of data structures ----------------------------- * Many put more than required in the export statements. For instance, the array of child pointers is exported. * Some put the linked-list stuffs in the tree module. They should be in a separate class/module. A few even put the declaration of the data record in the tree module! * Some still don't distinguish classes and types. As a result, they put redundant type declarations into classes. * Have too many global variables in classes/modules for communicating between procedures. Should use parameter passing. Implementation of operations --------------------------- * I am happy to see that many can use recursion properly. * Use of magic constants (e.g. 65 which is ord("A")). * Lack of code sharing. For example, some don't realize that PRINTRANGE and PRINTPOSTAL can share the same searching routine. * Some PRINTRANGE implementations can only handle the first 3 characters of a postal code. Use of inheritance ------------------ * Two ways are used to deal with the circular dependency. One is to split a class definition into interface and implementation. The other way is to define two subclasses only: INTERNAL and LEAF. LEAF doesn't need to import INTERNAL. Both ways are good. * Many don't use inheritance to reuse codes. Instead, they defer some procedures like the initialization of the child pointers that can be shared by all subclasses and write two very similar procedure in two different subclasses. Report ====== General Organization -------------------- * It is nice to have a picture showing the class hierarchy and the import/export relationship. However, this picture is missing in quite a lot of reports. For those who have it, some do not explain the edges. * Don't just say what the classes are. Need to explain what are inherited and/or overridden and why. Tree Structure -------------- This part is not a problem in general. However, some repeat the things in "General Organization" here. List Structure -------------- * How linked lists are implemented in your program? Pointer or array implementations? * A few confuse linked lists with leaf nodes. They write down how leaf nodes are handled. Testing ------- Still the weakest part of the report. * A single data point for each operation is definitely not enough. Do at least 3. * Many did not test the two boundary cases of PRINTPOSTAL and PRINTRANGE: non-existing postal codes and empty print ranges. * Try different prefix lengths for PRINTRANGE. * Many testing results are still not self-explanatory. Please label your results. Also, it is good to use colors to highlight key things in the listings. Overall ------- * Many have a better idea of how to divide things into sections in this assignment. But some still insist on writing a 30-line paragraph containing 5 concepts. A few even have no headings! * Obviously, most students have to improve their writing. It seems that spell checkers were used commonly. But, many need a grammar checker. Also, their writing styles are not technical. For example, many use "I" and "my" instead of "we" and "our". Also, they don't like using tables and bullets.