|Lesson 3||Operating System Course Requirements|
|Objective|| Course Requirements|
You can take this course on Windows, Macintosh, or Linux platforms. In other words with any machine or device that has a browser.
A Brief History of Unix
The Macintosh started out with a single-tasking operating system that allowed simple switching between applications through an application called the MultiFinder.
More recent versions of the Mac OS have supported multiple applications running simultaneously, but it was not until the landmark release of OS X that true multitasking arrived in the Macintosh world.
With OS X, Macintosh applications run in separate memory areas; the Mac is a true multiuser system that also includes proper file-level security.
To accomplish these improvements, OS X made the jump from a proprietary underlying operating environment to Unix. OS X is built on top of Darwin, a version of Unix based on BSD 4.4 Lite, FreeBSD, NetBSD, and the Mach microkernel.
Unix itself was invented more than 40 years ago for scientific and professional users who wanted a very powerful and flexible OS. It has evolved since then through a remarkably circuitous path,
with stops at Bell Telephone Labs, UC Berkeley, and research centers in Australia and Europe, and also received some funding from the US Department of Defense Advanced Research Projects Agency (DARPA).
Because Unix was designed by experts for experts, it can be a bit overwhelming at first. But after you get the basics you will start to appreciate some of the reasons to use Unix. For example:
It comes with a huge number of powerful programs, and you can get many others for free on the Internet.
Unix is pretty much the same, regardless of whether you are using it on OS X, FreeBSD, or Linux, or even in tiny embedded systems or on a giant supercomputer. After you read this book, you will not only know how to harness the power of Unix, but you will also be ready to use many other kinds of Unix-based computers without having to learn new commands for each one.
All you need to complete this course on Object Oriented Design and Programming is a text editor or Google Docs.
Later in this module, the details of exercise submission are outlined.
(OOP) Object-oriented programming
What is object-oriented programming (OOP)?
We define it as follows:
Object-oriented programming is a method of implementation in which programs are organized as cooperative collections of objects, each of which represents an instance of some class,
and whose classes are all members of a hierarchy of classes united via inheritance relationships.
There are three important parts to this definition: (1) Object-oriented programming uses objects, not algorithms, as its fundamental logical building blocks (the part of hierarchy we introduced in Chapter 1);
(2) each object is an instance of some class; and (3) classes may be related to one another via inheritance relationships
- A program may appear to be object-oriented, but if any of these elements is missing, it is not an object-oriented
program. Specifically, programming without inheritance is distinctly not object-oriented; that would merely be programming with abstract data types.
- By this definition, some languages are object-oriented, and some are not. Stroustrup suggests that
if the term "object-oriented language" means anything, it must mean a language that has mechanisms that support the object-oriented style of programming well.
- A language supports a programming style well if it provides facilities that make it convenient to use that style.
A language does not support a technique if it takes exceptional effort or skill to write such programs; in that case, the language merely enables programmers to use the techniques.
From a theoretical perspective, one can fake object-oriented programming using non-object-oriented programming languages like Pascal,
but it is horribly ungainly to do so. Cardelli and Wegner thus say: A language is object-oriented if and only if it satisfies the following requirements:
- It supports objects that are data abstractions with an interface of named operations and a hidden local state.
- Objects have an associated type [class].
- Types [classes] may inherit attributes from supertypes [superclasses].
In the next lesson, Object Oriented course resources will be discussed.