Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
hill:275 [2009/10/13 12:52]
hill
hill:275 [2009/10/13 19:02]
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 basicstoday 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 basicstoday 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 spaceor 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** project code ("​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.)?
  
hill/275.txt · Last modified: 2009/10/14 12:33 by hill
  • 213 Smith Hall   •   Computer & Information Sciences   •   Newark, DE 19716  •   USA
    Phone: 302-831-6339  •   Fax: 302-831-8458