diff options
author | ehilsdal <ehilsdal> | 2003-08-27 20:01:24 +0000 |
---|---|---|
committer | ehilsdal <ehilsdal> | 2003-08-27 20:01:24 +0000 |
commit | 00cf2e4ce99f94e488a39923bc3ad6ac12388b9e (patch) | |
tree | 708685e49355273a5bec50d89614634878304cdc /docs/teaching/exercises | |
parent | 2dec4e0289b56ed1e2c2ac34a3cae80d00a0d769 (diff) | |
download | aspectj-00cf2e4ce99f94e488a39923bc3ad6ac12388b9e.tar.gz aspectj-00cf2e4ce99f94e488a39923bc3ad6ac12388b9e.zip |
starting rework for oopsla
Diffstat (limited to 'docs/teaching/exercises')
-rw-r--r-- | docs/teaching/exercises/index.html | 91 |
1 files changed, 29 insertions, 62 deletions
diff --git a/docs/teaching/exercises/index.html b/docs/teaching/exercises/index.html index 4dff3dae0..c69192e46 100644 --- a/docs/teaching/exercises/index.html +++ b/docs/teaching/exercises/index.html @@ -135,6 +135,13 @@ users who bind System.out to a static field to save typing. </p> <h3>b. Mandate setters</h3> +<p> <strong>Problem:</strong> Add warnings for assignments outside of setter methods. +</p> + +<p> <strong>Tools:</strong> <code>set</code>, <code>withincode</code>, +signature <code>void set*(..)</code> +</p> + <p> One common coding convention is that no private field should be set outside of setter methods. Write an aspect to warn at compile time when such an illegal assignment expression exists. </p> @@ -157,53 +164,21 @@ pointcuts. ) </p> <p> Make sure your program still passes the JUnit test <code>tests.Test</code> before continuing, and that you see all of the -following warning messages. You'll notice a LOT of warnings here. -Wait to fix them until the next exercise... +following warning messages. Make sure you get 11 warnings from this. +Wait to fix them until the next exercise. </p> -<pre> -.\figures\Box.java:17:9: bad field set (warning) - _p0 = new Point(x0, y0); - ^ -.\figures\Box.java:18:9: bad field set (warning) - _p1 = new Point(x0+width, y0); - ^ -.\figures\Box.java:19:9: bad field set (warning) - _p2 = new Point(x0+width, y0+height); - ^ -.\figures\Box.java:20:9: bad field set (warning) - _p3 = new Point(x0, y0+height); - ^ -.\figures\Group.java:16:23: bad field set (warning) - this._members = new ArrayList(); - ^ -.\figures\Line.java:15:9: bad field set (warning) - _p1 = p1; - ^ -.\figures\Line.java:16:9: bad field set (warning) - _p2 = p2; - ^ -.\figures\Point.java:15:9: bad field set (warning) - _x = x; - ^ -.\figures\Point.java:16:9: bad field set (warning) - _y = y; - ^ -.\figures\Point.java:28:9: bad field set (warning) - _x += dx; - ^ -.\figures\Point.java:29:9: bad field set (warning) - _y += dy; - ^ -</pre> +<h3>c. Refine setters mandate</h3> +<p> <strong>Problem:</strong> Allow assignmnents inside of constructors. +</p> -<h3>c. Refine setters mandate</h3> +<p> <strong>Tools:</strong> signature <code>new(..)</code> </p> <p> Look at some of the warnings. Notice that a lot of them are from within constructors. Actually, the common coding convention is that -no private field should be set outside of setter methods <b>or -constructors</b>. Modify your answer (in a new file) to signal an +no private field should be set outside of setter methods <emph>or +constructors</emph>. Modify your answer (in a new file) to signal an actual error at compile time (rather than just a warning) when such an illegal assignment expression exists. </p> @@ -225,30 +200,15 @@ the following two errors:</p> 2 errors </pre> -<p> (If you see more, go back to 1b; you may be capturing sets to -too many fields.) -</p> - <p>Rewrite these two occurrences so as not to violate the convention. Make sure your program still passes the JUnit test <code>tests.Test</code> before continuing. </p> -<h3>d. Re-refine setters mandate</h3> - -<p> In part (c), you rewrote the code to fit the convention enforced -by the aspect. It may be that this code doesn't violate the convention -of your mythical organization. Try to instead fix the pointcut so it -doesn't signal an error for these two assignments, and then change -your code back to making the assignments. </p> - -<p> Make sure your program still passes the JUnit test -<code>tests.Test</code> before continuing. </p> - -<h3>Help Yourself by Helping Others</h3> - -<p> At this point, check the people to your left and right. If -they're stuck somewhere, see if you can help them. </p> +<h3>d. Congratulatoins</h3> +<p> You've taken your first steps. At this point, check the people to +your left and right. If they're stuck somewhere, see if you can help +them. </p> <!-- ============================== --> @@ -259,11 +219,18 @@ they're stuck somewhere, see if you can help them. </p> <h3>a. Check a simple precondition</h3> +<p> <strong>Problem:</strong> Pass <code>tests.Test2a</code>. +</p> + +<p> <strong>Tools:</strong> <code>args</code>, <code>before</code> +</p> + +<p> THERE IS AN ANSWER BELOW. LOOK AT IT. TYPE IT IN. +</p> + <p> Write an aspect to throw an <code>IllegalArgumentException</code> whenever an attempt is made to set one of <code>Point</code>'s -<code>int</code> fields to a value that is either too large (greater -than <code>FigureElement.MAX_VALUE</code>) or too small (less than -<code>FigureElement.MIN_VALUE</code>). </p> +<code>int</code> fields to a value that is less than zero. </p> <p> This should make the test case of <code>tests.Test2a</code> pass, which wouldn't without your aspect. So before compiling in the |