This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
|
hill:275 [2009/10/13 12:52] hill created |
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 & debugging in Eclipse | + | * Introduction to refactoring |
| + | * Using Eclipse's debugger | ||
| == 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.)? | ||