Post on 07-Mar-2020
Ian Holyer
Object OrientedObject OrientedProgrammingProgramming
with Javawith Java
COMSM0103
1
ContentsContentsProgramming:Programming: in Java
Design:Design: in the Object Oriented (OO) style
Development:Development: set good examples, avoid bad habits
These subjects are big, and they change, so this unit isonly an introduction to start off your lifelong learning
2
AssumptionsAssumptionsYou have programmed in C (or C++)
You may or may not be a confident programmer
You want to review, consolidate, and extend yourprogramming skills, and learn something about objectorientation, and industry practices
3
Unit materialsUnit materialsThe unit materials (see csijh.gitlab.io) contain:
lecture notesassignmentsasides, including Java detailsLinks: (SAFE, Java docs, Wrap)
Check frequently, and reload/refresh, for updates
4
CourseworkCourseworkThere are regular assignments, all individual, some ofwhich will count towards your mark for the unit
There is no exam; the final assignment is open ended,with everyone doing a different mini-project
Early assignments will be at least partly auto-marked;your mark will depend on how many tests you pass
5
SupportSupportGet support at the timetabled lab sessions
Support each other
See me in my office: things to know about me are
1. I don't use email2. I don't have office hours3. Just drop in (you can check my calendar csijh)
6
BooksBooksWe won't be following any one book very closely, but Irecommend
Java Programming, at wikibooks, free, Java 7
Thinking in Java, 3rd edition is free, Java 4
My mini Java course in the asides
We will use features from all versions of Java up to 9(but with comments about newer features)
7
QuestionsQuestionsWhat is Java?
What is OO Programming (OOP)?
What is OO Design (OOD)?
What is OO development?
8
What is JavaWhat is JavaYou can think of Java as like C, but with:
pointer notation removedother troublesome features removed or changedmuch greater platform independenceclasses and other object oriented features addedlibraries and other development features added
I'll be assuming OpenJDK + OpenJFX (Oracle's JDK is nolonger free, it is almost the same but they charge forsupport)
9
What type of language?What type of language?C is a procedural (or imperative) language: "do this andthen do that", it uses functionsfunctions and datadata, and functionaldecomposition is its intended design technique
Java is an object oriented language, it uses classes andobjects to organiseorganise functions and data, and objectorientation is its intended design technique
There are other paradigms: assembly languages,scripting languages, declarative languages, functionallanguages, logic languages, ...
10
Function decompositionFunction decompositionA main function is broken down into smaller functions,etc, forming a tree, with data interwoven everywhere
Although effective programs can be written this way,they tend to be monolithic and brittle
11
What is OO design?What is OO design?A program is written as independent cooperatingcomponents, each looking after its own data:
It turns out that this scales up better to larger projects,and works better for teams, ifif you do it properly
12
Importance of OO designImportance of OO designAt first, writing well-designed programs takes moreeffort
Later, it becomes easiereasier to write well-designed programsthan to write poorly designed ones
And it is muchmuch easier to extend, update or re-use well-designed programs
One of the main things that becomes easier is to ensurerobustness
13
Perfect designsPerfect designsPerfect designs don't existdon't exist
One agile development principle is KISS - Keep It Sweetand Simple, and don't over-engineer
Stop when it worksworks perfectly, don't keep making itprettier inside - perfectionists take note!
A design is always a compromise or tradeoff betweensimplicity, clarity, maintenance, efficiency, generality,compatibility etc.
14
What is OO development?What is OO development?An OO approach is at the core of today's agiledevelopment practices
We will concentrate mostly on three key issues: whatOO contributes to development, clean programming,and unit testing
When you are doing a group project, it may beenlightening to tie up that experience with the issues inthis unit
15
Medium level questionsMedium level questionsWhat are classes and objects?
What is abstraction?
What is encapsulation?
What is inheritance?
What is polymorphism?
16
What are classes and objects?What are classes and objects?Classes are modulesmodules, dividing the source intocomponents, normally with one file per class
Objects are structuresstructures, dividing a running program intocomponents, each holding related data and functions
Later, classes and objects will be more than this
17
Other conceptsOther conceptsClasses and objects provide:
abstraction encapsulation inheritance polymorphism
Think of a car: abstraction = "easy to use, complexinside", encapsulation = "complexity hidden under thehood/bonnet", inheritance = "different models just addfeatures", polymorphism = "tyres fit any make or model"
Follow the links, or read what someone else says
18
What is abstraction?What is abstraction?Abstraction is concentrating on whatwhat an object does, nothowhow it does it
For the Google Maps program (and some people), a caris a box which gets you from A to B - it just has aposition
In a driving simulator, a car object might haveaccelerate, brake and steer functions
In a self-drive program, a car object has lots of sensorsas well as controls
18a
What is encapsulation?What is encapsulation?Encapsulation goes further: the internal details of howhowsomething is done cannot be seen, accessed orinfluenced from the outside
One advantage of this is robustness: the user of anobject can't accidentally interfere with its correctworking (it can be misused, but not broken)
Another is maintenance: an object can more easily beupgraded or replaced without changing any code whichuses it (components can be developed independently)
18b
What is inheritance?What is inheritance?Inheritance is one way of re-using components
A Vehicle component may provide basic operations,shared between child classes Car, Train, Plane, ...
A child component inherits the features and code of itsparent
Beware:Beware: don't over-use inheritance, because it can createa strong dependency between components
18c
What is polymorphism?What is polymorphism?Polymorphism is another way of re-using components
It is where a component is general enough to be usedfor a wide variety of purposes
It includes generics and overloading
Beware:Beware: although it is essential to know about generictypes in library software, writing your own can bedifficult
18d
Lower level questionsLower level questionsWhat is Java?
How is it installed?
How are programs compiled?
How are programs run?
19
Java historyJava historyJava emerged in the 1990s for web applets (nowobsolete) compared with the 1970s for C
It is now used extensively for giant servers, desktopapplications, mobile devices, and embedded processors
It has very little in common with the scripting languagecalled JavaScript, which isn't part of this unit
It has some things in common with C++ but is muchcleaner (C++ is also not part of this unit)
20
Java effectivenessJava effectivenessPart of Java's success is the fact that it works the sameon every platform, and that its extensive library of re-usable components is part of the standard
Java is almostalmost "write once, run anywhere" (but, e.g.Android's Java is not full Java, yet)
Platform independence comes from the language, thelibrary, and the interpretive bytecode
Interpreting can be slow, but Just-In-Time compilingspeeds it up after an initial pause, and Ahead-Of-Timecompiling is starting to eliminate the initial pause
21
Java safetyJava safetyPre-compiled machine code ('binary') programs are notsafe; they might do anythinganything to your computer
This is even worse for web applets, where you don't getto choose whether the program runs
Sandboxes were used to make Java safe for the Web(like JavaScript), sandboxes are used on mobiles, andsandboxes are increasingly being used on desktops
Safety depends on JIT or AOT compilation afterafter thesource or bytecode arrives on a computer
22
Java convenienceJava convenienceThere are no explicit pointers or pointer manipulation(though an understanding of pointers is needed)
There is no explicit memory management (though anunderstanding is needed)
All array accesses have out-of-bound checks
A large set of C problems don't happen, and anotherlarge set cause useful error messages instantly ratherthan causing obscure errors later
23
Using JavaUsing JavaDetails about installing Java, compiling programs, andrunning them, are in the aside: getting started
The basics are:
edit Program.javaedit Program.java javac Program.java javac Program.java producing Program.classproducing Program.class java -ea Program java -ea Program for testingfor testing java Program java Program for runningfor running
24
Hello.javaHello.java
Hello WorldHello WorldHere's the traditional minimal program to try out:
classclass HelloHello {{ publicpublic staticstatic voidvoid mainmain(String[] args)(String[] args) {{ System.out.println( System.out.println("Hello World!""Hello World!");); } } }}
class Hello blocks{C} publicstatic main{C} String Systemedit compile run make
See the Java 1 aside for more details on basic syntax
25
ClassesClassesAlmost always, every file that makes up a program is aclass, and every class is in its own file
classclass HelloHello {{ ... ... }}
You probably won't have to worry about exceptions fora while
A class begins with the keyword class, the class name,then a block containing the data and the code
25a
Hello.javaHello.java
Class namesClass namesIt is conventional for a class name to start with a capitalletter - if you don't do this, it can cause problems whenprograms are moved from one platform to another
classclass HelloHello {{ ... ... }}
It is conventional for a class name to be the same as thebasename of the file it is in, e.g. class Hello must be ina file Hello.java - if you don't do this, the compilermay be unable to link up the classes properly
25b
BlocksBlocksThe {C} symbol indicates something that is essentiallythe same as in the C language
In particular, blocks are the same
They are surrounded by curly brackets, and each item isterminated by a semicolon
As in C, blocks used to declare data need a semicolon,whereas normal blocks at the end of statements don't
intint[] list = { [] list = { 11, , 22, , 33 }; }; ifif (n< (n<00) { n = -n; }) { n = -n; }
25c
publicpublicIf something is declared public, it is visible outsidethe folder the program is in
...... publicpublic ... main ... ... main ... ......
This is needed for main, which must be visible to thesurrounding operating system to run the program
But you won't need it for anything else until you startwriting multi-folder programs
25d
staticstaticIf something is declared static, it is global ratherthan belonging to an object
... ... staticstatic ... main ... ... main ...
This is needed for main by convention, and you need tounderstand its use in library software (e.g.System.out is a static object)
But you shouldn't use it for anything else, until youunderstand the implications, and the rare circumstanceswhere it should be used
25e
mainmainAs in C, the program starts in the function called main
... main ...... main ...
But when you run a Java program, you specify whichclass to use, that means there can be main functions inmany classes, and that is useful for testing
The name main is terrible: a function name should be averb, or sometimes an adjective, so run is better - youdon't 'main' a program, you run it!
25f
StringStringThe type String in Java replaces char * in C
You can tell by the capital letter that it is a class, fullname is java.lang.String (classes in java.langare available to programs without explicit import)
You can read its source code (type 'source String.java'into Google)
Of course, the compiler understands strings andcooperates with the string class, e.g. "Hi" has typeString
25g
SystemSystemThe System class (java.lang.System) providessome standard facilities, a bit like stdio.h in C
Many of its facilities are static, attached directly to theclass, e.g. System.out for standard output
On the other hand, out is an object, one of manypossible output streams
25h
EditEditJava can be verbose, but this is offset by (a) the fact thatyou often use the libraries instead of doing it yourselfand (b) you can get your editor to help
For example, if you use Atom as your editor, if you typemain, you will be offered a complete skeleton for themain method as a completion (press Enter to accept)
25i
CompileCompileTo compile the program, type:
javac Hello.javajavac Hello.java
You mustmust include the extension .java
Compiling produces a file called Hello.classcontaining bytecode ready to run
25j
RunRunTo run the program, type:
java Hellojava Hello
This time, you must notmust not include an extension
25k
MakefileMakefile
MakeMakeBecause (a) compiling commands can get complexand/or irritating and (b) the compiler only partiallyhandles dependencies, I suggest using a Makefile fromthe beginning
You can start with this:
%: %.java%: %.java javac $@.java javac $@.java java -ea $@ java -ea $@
Then you can adapt it later when you start buildingmulti-class projects
25l
First assignmentFirst assignmentThe first assignment, this week, is to write a program toturn a mark like 70 into a grade like Distinction
We'll go through the skeleton you've been given for theassignment
26
ClassesClassesIn Java source programs, a file like Grade.javacontains a class, and each class gets its own file (usually)
classclass GradeGrade {{ ... ... }}
A class begins with the keyword class, the class namewhich must match the file namewhich must match the file name, then a blockcontaining the data and the code
27
mainmainEvery program has a main function:
publicpublic staticstatic voidvoid mainmain(String[] args)(String[] args) {{ ... ... }}
Unlike C, classes which are supporting modules ratherthan programs can have their own main, often used todo testing. Don't use public or static anywhereelse! (yet)
28
ObjectsObjects
...Grade program = ...Grade program = newnew Grade(); Grade();
...program.run(args)......program.run(args)...
It is a good idea to get out of the static (C) world as fastas possible
Normal functions like grade, convert, test onlyexist attached to objects
Calling them from each other is normal, it is only inmain that you need the program. prefix
29
TestsTestsThe main method (function) and the tests are given;just develop grade and convert until the tests pass
Tests are done using assert, a keyword that can beused like a function; it checks that something is true
You need java -ea ('enable assert') to switch ontesting (and some dirty trickery to detect whether ithas been turned on); a Makefile is provided
Note equality testing uses == for ints, but .equals()for strings (the equivalent of strcmp in C)
30
Checking Checking -ea-eaThe trick is:
booleanboolean ea = ea = falsefalse;; assertassert(ea = (ea = truetrue);); ifif (! ea) System.out.println( (! ea) System.out.println("No -ea flag given!""No -ea flag given!"););
Inside the assert is an assignment (=, notnot ==)
If asserts are not switched on, the assert does nothingand ea is not set to true
30a
Rules of developmentRules of developmentThese are incredibly important for one-file programs, orfor each class in multi-file programs:
keep a program working all the timewrite only one or two lines before re-compilingand re-testingwrite tiny functions, e.g. five linesbuild in automatic tests, run from mainkeep I/O separate and add it lastlastkeep it simple, because it is almost untestable
31