Discussion 5 - Final review.
What is a Framework?
Framework refer to a set of libraries or classes that are used to implement the standard structure of an application for a specific operating system. By bundling a large amount of reusable code into a framework, much time is saved for the developer, since he/she is saved the task of rewriting large amounts of standard code for each new application that is developed.
What are the benefits of Frameworks?
- Modularity: Frameworks enhance modularity by encapsulating implementation details behind stable interfaces. Framework modularity helps improve software quality by localizing the impact of design and implementation changes. This localization reduces the effort required to understand and maintain existing software.
- Reusability: The stable interfaces provided by frameworks enhance reusability by defining generic components that can be reapplied to create new applications. Framework reusability leverages the domain knowledge and prior effort of experienced developers in order to avoid re-creating and re-validating common solutions to recurring application requirements and software design challenges. Reuse of framework components can yield substantial improvements in programmer productivity, as well as enhance the quality, performance, reliability and interoperability of software.
- Extensibility: A framework enhances extensibility by providing explicit hook methods that allow applications to extend its stable interfaces. Hook methods systematically decouple the stable interfaces and behaviors of an application domain from the variations required by instantiations of an application in a particular context. Framework extensibility is essential to ensure timely customization of new application services and features.
Wikipedia, Washington University.
Discussion 4 - Midterm review.
What is sketchpad?
Sketchpad was a revolutionary computer program written by Ivan Sutherland in 1963 in the course of his PhD thesis. It helped change the way people interact with computers. Sketchpad is considered to be the ancestor of modern computer-aided drafting (CAD) programs as well as a major breakthrough in the development of computer graphics in general. Ivan Sutherland demonstrated with it that computer graphics could be utilized for both artistic and technical purposes in addition to showing a novel method of human-computer interaction.
Sketchpad was the first program ever to utilize a complete graphical user interface. Sketchpad used an x-y point plotter display as well as the recently invented light pen. The clever way the program organized its geometric data pioneered the use of "objects" and "instances" in computing and pointed forward to object oriented programming. The main idea was to have master drawings which one could instantiate into many duplicates. If the user changed the master drawing all the instances would change as well. Another major invention in Sketchpad was to let the user easily constrain selected geometrical properties in the drawing. For instance the length of a line or that two lines should have a specific angle between them. Sketchpad ran on the Lincoln TX-2 computer at MIT. (Wikipedia).
What is Simula?
Simula is a programming language developed in the 1960s at the Norwegian Computing Centre in Oslo, primarily by Ole-Johan Dahl and Kristen Nygaard. Syntactically, it is a superset of Algol60, adding features that are close to the modern idea of classes and objects, plus coroutines.
Simula introduced the object-oriented programming paradigm and thus can be considered the first object-oriented programming language and a predecessor to Smalltalk, C++, Java, C#, and all modern class-based object-oriented languages. As its name implies, Simula was designed for doing simulations, and the needs of that domain provided the framework for many of the features of object-oriented languages today. (Wikipedia).
Who were the key people associated with Sketchpad, Simula, and the original Smalltalk?
Sketchpad: Ivan Shuterland.
Ole-Johan Dahl and Kristen Nygaard.
Smalltalk: Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg.
What do they have to do with Squeak?
The Squeak programming language is a Smalltalk implementation, derived directly from Smalltalk-80, by Smalltalk's originators.
Squeak incorporates many of the elements Alan Kay proposed in the Dynabook concept, which he formulated in the 1960s. Kay is an important contributor to the Squeak project. Kay, and many other Squeak contributors also collaborate on the open source Croquet project. (Wikipedia).
How did OO ideas get out into the mainstream (out of the research lab)?
Smalltalk-80 was the first version made available outside of PARC, first as Smalltalk-80 Version 1, given to a small number of companies (HP, Apple Computer, Tektronix, and DEC) and universities (UC Berkeley) for "peer review" and implementation on their platforms. (Wikipedia).
My name is Luis Fernando Cruz (gtg648w), and I am a CS junior. I am currently taking:
- Intro to Data Bases.
- Intro to AI.
- and this one (Objects and design).
My specialization courses will be in AI and Graphics/visualization.
I also work (freelance/independent) in web design and video editing. www.LFCediting.com .
My prism web page.
I had a lot of trouble with the button listeners, and the conversion of text from an input to an integer, after some hours of trying, and trying.... I had to change the type of buttons (plugabble buttons). One of the advantages of Squeak that come to my mind is the exploring and browsing capability of this IDE. This interesting feature that everybody should have used by this moment allow us to check how things work in squeak, BUT this cool feature is "shadowed" by the lack of documentation and sample code, reviews, FAQ's, etc: therefore:
+ Cool Squeak feature (Browsing/exploring of internal code) - Lack of documentation = 0.
As I just said and everybody knows, Squeak lacks online documentation; therefore, simple programming bugs may take the programmer hours to figure it out. This is obviously caused by the very small group of squeak programmers. Is there a solution? Well... If the Squeak users increase, the documentation will also increase, but this is almost impossible due to more popular and useful languages that exist such as: C/C++and Java.
- From Matias Paulez: I agree that we come with a background of C-family languages, and the transitions from this to Squeak is very "frustrating", and the lack of documentation and a good API makes it worse. Like Matias, I also do not see a future to Squeak, at least not in the professional and commercial side.
- From Wes Floyd: Thanks for telling us about FillInTheBlankMorph, a little late though. After some very frustrating hours of dealing with input, I was told about this component. I have seen that this component makes input very easy. Please check documentation if you want to know more about this :) .
I am sorry for my thoughts about Squeak, they are not very positive. I just want to say what I really think about this.
- Creational Pattern:
This design pattern is involved in the process of object creation favorable to the situation. This pattern attempts to solve the basic form of object creation which may result in problems by somehow controlling this creation process.
Builder is a creational pattern that separates the construction of a complex object from its representation. (Wikipedia and Data & Object Factory).
- Structural Pattern:
This design pattern simplify the design by obtaining a simple to way to realize relationships between entities.
Decorator is a structural pattern that attach additional responsibilities to an object dynamically. (Wikipedia and Data & Object Factory).
- Behavioral Pattern:
This design pattern identifies common communication patterns between objects and realize these patterns; thus, increasing flexibility in carrying out this communication.
Command is a behavioral pattern that encapsulates a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations. (Wikipedia and Data & Object Factory).
Data & Object factory.
In every software application it is very important to have a undo operation. This operation may have many levels; therefore, it is very important to have a very good design and pattern, so the data structure can keep track of changes and states. A behavioral design pattern like Memento comes handy to this situation.
Source: The following UML diagram and description has been taken from Data & Object Factory:
The classes and/or objects participating in this pattern are:
- Memento (Memento)
- stores internal state of the Originator object. The memento may store as much or as little of the originator's internal state as necessary at its originator's discretion.
- protect against access by objects of other than the originator. Mementos have effectively two interfaces. Caretaker sees a narrow interface to the Memento -- it can only pass the memento to the other objects. Originator, in contrast, sees a wide interface, one that lets it access all the data necessary to restore itself to its previous state. Ideally, only the originator that produces the memento would be permitted to access the memento's internal state.
- Originator (SalesProspect)
- creates a memento containing a snapshot of its current internal state.
- uses the memento to restore its internal state
- Caretaker (Caretaker)
- is responsible for the memento's safekeeping
- never operates on or examines the contents of a memento.
This article relates to the history of some of the main programming languages, why they emerged and why they are or were popular.
Variety in programming languages is important because they are specialized for different tasks even though an application can be written in many languages. This variety can make a programmer's career demand more study, but also help by giving the programmer different choices.
Most of commercial applications are written in these two languages. They provide fast performance, compilers for many different platforms. No garbage collection.
Created for portability (internet, appliances and electronics) and cross-platform, but its popularity has increased that is now being used for regular applications. Built-in garbage collection.
"The language was designed at IBM for scientific computing. The components were very simple, and provided the programmer with low-level access to the computers innards. Today, this language would be considered restrictive as it only included IF, DO, and GOTO statements, but at the time, these commands were a big step forward. The basic types of data in use today got their start in FORTRAN, these included logical variables (TRUE or FALSE), and integer, real, and double-precision numbers". (Princeton, see url above).
"It was designed from the ground up as the language for businessmen. Its only data types were numbers and strings of text. It also allowed for these to be grouped into arrays and records, so that data could be tracked and organized better. It is interesting to note that a COBOL program is built in a way similar to an essay, with four or five major sections that build into an elegant whole. COBOL statements also have a very English-like grammar, making it quite easy to learn. All of these features were designed to make it easier for the average business to learn and adopt it". (Princeton, see url above).
"It was designed for Artificial Intelligence (AI) research. Because it was designed for such a highly specialized field, its syntax has rarely been seen before or since. The most obvious difference between this language and other languages is that the basic and only type of data is the list, denoted by a sequence of items enclosed by parentheses. LISP programs themselves are written as a set of lists, so that LISP has the unique ability to modify itself, and hence grow on its own." (Princeton, see url above).
An open source language created by web designers for web designers. It is simple, very high level and now supports OOP. It syntax is very similar to that of the C family.
There are more task oriented languages such as SQL for data bases, and proprietary languages such as ActionScript in Macromedia Flash and MEL in Alias Maya.
These many languages positively affect programmers. The programmer now have the "free" choice to select a language that best fits the project and programmer's taste. The down side will be the time required to learn it.
The language that is used is not what really matters, but the final product, the design, quality, performance and usefulness.
I have found this link which includes some squeak projects.
Comments on Tom Filip's discussion:
..."but Java has been somehow proven to outperform C on server and VoIP..."
I think that it is impossible that a Java application can outperform any application written in a compiled code written in C/C++ as long as Java depends on a VM. Java has been increasing its performance, and now with the release of Java 1.5 this gap is shrinking. I did a quick research in Java vs C/C++ benchmark and I found this research from IBM: "... Nevertheless, the end user observes a 20 percent difference on the application performance, which is the most relevant figure for this Java vs C comparison. By analytically isolating the second tier of the benchmark, we found the C++ and
ODBC combination to be approximately 35 to 40 percent faster than the Java and
JDBC implementation. The difference is attributable to a combination of
JDBC architecture, implementation, and Java and C++ differences..." (Java Server Benchmark, IBM).