Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007
Since you clicked on the link you've probably already figured out my name.
If you failed to catch it on the way in, try looking up.
I'm a 5th year C.S. major who's hopefully only on the 5 1/2 year plan.
I'm originally from just south of Chicago Il but I've pretty much decided
to live here in Georgia. I've been working for almost 3 years now with
a company out of California called Interwoven. We are one of the leaders
in ECM (Electronic Content Management). Yeah, I know what you're thinking,
it's business software but Eh it pays the bills. If you're looking to find
out more about me (read as: scary stalker) then come ask me. How can you
find me you ask? Well, I'm a middle class white male who normally carries
around a laptop. That should get you started...
1. In detail, describe a problem that you experienced in Squeak. What was the problem? Why did it happen? How did you eventually overcome this problem?
The biggest problem with squeak is the lack of documentation for the code. I understand that the code itself is a form of documentation but it isn't enough. When want to use a class, I don't want to spend an hour digging through the code and digging through the code's inherited hierarchy to understand how to use the class and all of its methods. Even then you still might not be able to figure out how to manipulate squeak into acting how you want it to. For example, with Squeak Point’s images boxes, when a rotation of the SketchMorph is executed a TransformationMorph is created. If you try to set the position after the rotation of the SketchMorph you get the morph’s new position at some undesirable location. I do believe the TransformationMorph is affecting this position. But I can only look and guess so much. There is no documentation explaining anything nor are there any use cases where someone else has had this problem. I’ve searched Google and browsed the Swiki but squeak just doesn’t have as much documented code examples as languages such as Java. I’ve had to ignore the problem till I have time to dig around some more and piece the behaviors together. Maybe then I’ll write something on my findings to help alleviate squeaks lack of documentation.
2. In detail, describe a feature of Squeak that you have found particularly useful. What is the feature? Why is it useful? How do you invoke it?
The browser is a godsend for this language. The language would be unusable if this feature did not exist. It can be invoked using the (click on world)->(open)->(browser). However I find it incredibly useful to highlight a class in an already open browser and press alt+b. This will open the class in a new browser. This cuts down on a lot of scrolling to find classes or class searches. It allows you to jump through a class’s hierarchy and jump to classes found in methods.
Discussion 3 - Ashley Durham
I had been looking for this feature for a while now! I remembered Jeff using it in class but forgot how to access it. This will save precious time, instead of scrolling through a class’s 100 methods.
Syntax highlighting in squeak? Brilliant! This will help prevent me from missing periods and suffering the same fate as Arcadiy. I wonder if it will help with message control?
Part 1: What are the differences between creational, structural, and behavioral patterns?
A design pattern is a catalogued solution that has been applied in more than one situation to produce well-designed reusable object-oriented software. It is the way that an experienced object-oriented developer would solve a particular problem. Learning individual design patterns is therefore a cheap alternative to years of bad design. Design patterns are classified into three distinct categories: Creational, Structural, and Behavioral. Creational design patterns are solutions to effective creation and instantiation of classes and objects. These patterns give “program[s] more flexibility in deciding which objects need to be created for a given case”. Structural design patterns deal with the class and object composition. On top of that, these design patterns help resolve complications of multi-object/class arrangements, such as complex user interface. The last set of design patterns fall under the Behavioral category. Behavioral design patterns provide ways to design communication between different classes and objects. The patterns describe methods and algorithms for establishing object responsibilities and program flow.
Part 2: Describe one design pattern or pattern language in your own words. Again, reference your sources. Explain what interests you about this pattern. Does it make sense to you? Can you see using it in your coding? If so, what for? If not, why not?
The Singleton design pattern is one of the most widely misused design patterns. The pattern ensures that a class has only one instance and that the class has a global point of entry, accessed by a class method. This global instance is used throughout the program. “Singletons are most appropriate for services that do not change their nature based on their invocation context. A singleton can be created at startup based on context or be reset for larger scale state transitions. A lot of things fall into this category: logging, communication, database access, etc are candidates.” This pattern is often used wrongly. Multiple Singletons are often used in place of proper object-oriented design. This pattern is interesting because my first uses of it were that of abuse. The design pattern can be an easy way to accomplish program state continuity. I’ve used Singletons to avoid god classes that would have resulted from my poor design. A fairly significant problem with Singletons is that their instance can sometimes be garbage collect in Java unless handles correctly. In CS2335, I finally used a single Singleton within the restriction of good design and it proved to be both powerful and useful.
Dylan Competitive Analysis
Written By: Bruce Randall Donald
Professor of Computer Science at Dartmouth
This article is a paper written by Mr. Donald in February of 1995. The aim of the article is to discuss the competitive position of Dylan against other object oriented programming languages: C++, Objective-C, and Small Talk. This paper appears to be slightly biased as Mr. Donald is proclaiming the benefits of Dylan over other languages. I think this paper can be used as long as the readers understand this and take only the facts with them. I think the article highlights a language in the world of object oriented programming that someone, such as myself, knows little about.
Professor Donald breaks the paper down into sections that dissect aspects of OOP that make them competitive. Mr. Donald first deals with Dylan’s syntax, then its memory management, performance, code size, support for incremental developing environments, debuggability, object orient techniques, modularity, interoperability, and finally its standardization. Of the compared languages, Dylan has a more readable and writeable syntax. For memory management, Mr. Donald claims Dylan has the advantage but he only compares the garbage collection ability to Smalltalk, C++, and Objective-C. C++ and Objective-C were written and then attempts we made to add GC functionality to them. He makes no significant argument on this matter. For the rest of the article, Mr. Donald continues to support Dylan. It becomes evident (after sorting through mainly strong arguments for Dylan) that Dylan is seen as a mix between Smalltalk’s portability and “poke-ability”, and C++ efficiency. By paving the middle road, Dylan is not as efficient as C++ nor is its visibility and control as good as Smalltalk’s. Dylan however remains a “pure” OO language.
The question then arises, “How does this translate for programmers?” The article, in respect to the world of programming mentality, was written a long time ago. The article would be more useful if it could be written comparing Dylan today with either C# or Java. For programmers, syntax, debuggability, modularity, and OO techniques are all very important. Dylan appears to be able to handle these needs. Dylan also appears to be a language that would be easy to learn and to be taught. However, it has been ten years since the article was written and Dylan books aren’t lining the shelves and on the lips of corporate managers. The fact that it is not widely used either indicates that it didn’t solve the needs of business and leisure nor did it gain the support of more people like Mr. Donald.
Discussion 1 Response:
I agree that for beginner programmers that Java could be an easier language to learn. Java removes a lot of the responsibility of programming from the programmer. This action however make Java a bad language to teach those who are beginning to program. Not teaching the fundamentals of programming is much like how we teach people to drive car but don’t explain how the engine or transmission works. When something breaks they have to take it to a mechanic. The problem is that programmers are the mechanics of their own code. Nirav also claims Java is more robust for, among other things, hiding pointers. Pointers are one of the things that make C so powerful. Java hides pointers because most Devry and ITT Tech graduates aren’t responsible enough to use them. Personally I think some of the best code I’ve written has been in C. This is due to the fact that Java allows you simply to be lazy.
Links to this Page