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
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 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 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.)?
  
hill/275.1255452776.txt.gz · Last modified: 2009/10/13 12:52 by hill
  • 213 Smith Hall   •   Computer & Information Sciences   •   Newark, DE 19716  •   USA
    Phone: 302-831-6339  •   Fax: 302-831-8458