This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
hill:275 [2009/10/13 12:52] hill |
hill:275 [2009/10/14 12:33] (current) hill |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Basic Software Development with Eclipse ====== | ====== Basic Software Development with Eclipse ====== | ||
- | In [[http://www.cis.udel.edu/~charlieg/labs/Lab1_Eclipse.pdf|Lab 1]] you learned Eclipse basics, today you'll learn about more advanced software development features: | + | In [[http://www.cis.udel.edu/~charlieg/labs/Lab1_Eclipse.pdf|Lab 1]] you learned Eclipse basics; today you'll learn about more advanced software development features: |
* Using the type hierarchy & call hierarchy | * Using the type hierarchy & call hierarchy | ||
* Introduction to refactoring | * Introduction to refactoring | ||
Line 8: | Line 8: | ||
== Initial Setup == | == Initial Setup == | ||
- | We'll be working with Freemind, a medium-sized (50 KLOC) open source application. You will need 65 MB of available space, or find a partner who does. On the composer machines, you should have no more than 37000 KB used (''quota -v''). | + | We'll be working with Freemind, a medium-sized (50 KLOC) open source application. You will need 65 MB of available space (or find a partner who does). On the composer machines, you should have no more than 37000 KB used (''quota -v''). |
- | **Setup instructions for composer machines (can be adapted to other OSes):** | + | **Setup instructions for composer machines (can be adapted to other OS's):** |
- | - Download [[https://sourceforge.net/projects/freemind/files/freemind-unstable/0.9.0%20RC4/freemind-src-0.9.0_RC_4.tar.gz/download|freemind-src-0.9.0_RC_4.tar.gz]] from sourceforge | + | - Download & extract Freemind |
- | - Open a terminal and navigate to the file (most likely in 'Desktop') | + | * Download [[https://sourceforge.net/projects/freemind/files/freemind-unstable/0.9.0%20RC4/freemind-src-0.9.0_RC_4.tar.gz/download|freemind-src-0.9.0_RC_4.tar.gz]] from sourceforge |
- | - Unzip & untar (''gunzip freemind-src-0.9.0_RC_4.tar.gz; tar xvf freemind-src-0.9.0_RC_4.tar'') | + | * Open a terminal and navigate to the file (most likely in 'Desktop') |
- | - If space is tight, delete the tar file once extracted (''rm freemind-src-0.9.0_RC_4.tar'') | + | * Unzip & untar (''gunzip freemind-src-0.9.0_RC_4.tar.gz;'' ''tar xvf freemind-src-0.9.0_RC_4.tar'') |
+ | * If space is tight, delete the tar file once extracted (''rm freemind-src-0.9.0_RC_4.tar'') | ||
+ | - Import Freemind into Eclipse | ||
+ | * open eclipse (''eclipse &'') | ||
+ | * Select File > New > Java Project | ||
+ | * Name the project "freemind", and select "create from existing source" | ||
+ | * Browse to your freemind folder (e.g., ''$USER_HOME/Desktop/freemind'') | ||
+ | {{:hill:screenshot.jpg|}} | ||
+ | * Select "finish", and wait for "Building workspace" to finish in the bottom right of the screen. | ||
== Running Freemind == | == Running Freemind == | ||
+ | Freemind is mind mapping software often used for knowledge and content management. It's a hierarchical editor that supports "folding"--that is, collapsing and expanding sections of the hierarchy. Today we'll focus on understanding how the **folding** functionality is implemented. | ||
+ | |||
+ | The easiest way to understand the concept of folding is to try it out: | ||
+ | - In the package explorer, right click on the freemind folder & select "Run As > Java Application" | ||
+ | - Select "freemind.main.FreemindStarter" as the main class to execute (ignore errors written to console) | ||
+ | {{:hill:main.png|}} | ||
+ | - Create a new mind map about Software Engineering: | ||
+ | * Add children nodes by going to "Insert > New Child Node", hitting the "insert" key, or selecting the lightbulb {{:hill:bulb.png|}} | ||
+ | * Add at least 3 levels of children, with at least 2 children per level | ||
+ | * Save the mind map | ||
+ | - Select a middle node (not leaf or root) and attempt to fold it. There are 3 ways to change a node's folding status: | ||
+ | * click the node | ||
+ | * hit space bar | ||
+ | * right click and select "toggle folded" | ||
+ | * select "Navigate > Toggle Folded" in the menu | ||
===== Using the type & call hierarchy to understand code ===== | ===== Using the type & call hierarchy to understand code ===== | ||
+ | |||
+ | ==== Call Hierarchy ==== | ||
+ | |||
+ | The call hierarchy shows calling relationships between methods in a program. For example: | ||
+ | |||
+ | * Navigate to the method ''toggleFolded(ListIterator listIterator)'' in class ''freemind.modes.minmapmode.actions.ToggleFoldedAction'' | ||
+ | * Right click the method name and select "Open Call Hierarchy" | ||
+ | * Look at the callers {{:hill:callers.png|}} and callees {{:hill:callees.png|}} | ||
+ | * Going back to the callers, expand ''toggleFolded'' & ''toggleFolded'' again. Look at the callers of ''actionPerformed''. | ||
+ | * Try looking at the callers of other methods, such as ''nameSetFolded'' | ||
+ | |||
+ | //**What information does the call hierarchy give you? Why is it useful for understanding a program?**// | ||
+ | |||
+ | ==== Type Hierarchy ==== | ||
+ | |||
+ | The type hierarchy shows how types are related. For example: | ||
+ | |||
+ | * Right click in the editor window for ''ToggleFoldedAction'' and select "Open Type Hierarchy" | ||
+ | * Right click on ''AbstractAction'' and select "Focus On 'AbstractAction'" | ||
+ | |||
+ | //**What information does the type hierarchy give you? Why is it useful for understanding a program?**// | ||
+ | |||
+ | |||
+ | **Exercise:** Show me an interesting call hierarchy and type hierarchy on **your own** project code (where "interesting" = more than 3 nodes) | ||
===== Basic Refactoring ===== | ===== Basic Refactoring ===== | ||
+ | |||
+ | //**What is refactoring? Why use it?**// | ||
+ | |||
+ | ==Rename== | ||
+ | * Right click on ''toggleFolded'' and select "Refactor > Rename" | ||
+ | * Add your name at the end of ''toggleFolded'' | ||
+ | * Verify your change is complete by looking at the call hierarchy & double clicking the callers | ||
+ | |||
+ | //**Why rename?**// | ||
+ | |||
+ | ==Extract Method== | ||
+ | * In the renamed ''toggleFolded'', select the 3 statements (6 lines) starting with ''modeController.getAction...'' | ||
+ | * Right click & select "Refactor > Extract Method" | ||
+ | * Enter a name (e.g., "initiateToggleAction") and hit enter | ||
+ | |||
+ | //**Why extract methods?**// | ||
===== Debugging in Eclipse ===== | ===== Debugging in Eclipse ===== | ||
+ | //**What's debugging? What's a debugger?**// | ||
+ | |||
+ | **Task:** How does the UI toggle folding action (click, space, etc.) initiate the ''toggleFolded'' implementation? | ||
+ | |||
+ | * In the margin next to ''toggleFolded'', right click & select "Toggle Breakpoint" | ||
+ | * In the menubar, select "Window > Open Perspective > Debug" | ||
+ | * Make sure freemind isn't running | ||
+ | * Next to the green "play" arrow, select the green bug icon {{:hill:bug.png|}} - there will be some delay | ||
+ | * Toggle a node. Notice the upper-left "Debug" pane, investigate the upper-right "Variables" pane, and see the current statement in the editor pane. The arrows in the debug pane {{:hill:arrows.png|}} let you step through the execution by one method call, by one statement, or by returning. | ||
+ | |||
+ | **Exercise:** Show me a debugging trace for ''toggleFolded''. Which method calls in the trace do you think handle your input method (click, space, right click, etc.)? | ||