9
Java for C++ Programmers Clint Jeffery University of Idaho [email protected]

Java for C++ Programmers Clint Jeffery University of Idaho [email protected]

Embed Size (px)

Citation preview

Page 1: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java for C++ Programmers

Clint Jeffery

University of Idaho

[email protected]

Page 2: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Object Oriented Programming

Object Oriented Design comes first. Objects originated in application domains.

OOP first appeared in SIMULA 67 classes and inheritance mixed w/ normal

code Popularized by SmallTalk 80

everything is an object, even integers! Method call == “send an object a message”

Page 3: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

History of Java

Designed by Gosling et al at Sun ~1991 Original niche: embedded programming w/

GUIs, such as cable TV boxes Portability based on bytecode VM Happy Accident: retargeted for browsers just in

time for Internet boom, 1995 Moves largely onto enterprise servers by 1999

or so Achieves 50+% university penetration, ~2005 Returns to its roots in Android, ~2008

Page 4: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java Design Principles

Simple, object-oriented, familiar Robust and secure Architecture neutral and portable Interpreted, threaded, and dynamic High performance (?)

Page 5: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java as a Better C++

Familiar == C/C++-like syntax Tries to avoid main sources of bugs and

security flaws in C++ code: pointers, memory allocation, type safety, preprocessor

Tries to be more Object-Oriented: everything is in a class

Tries to be easier and simpler than C++ Tries to be amenable to large projects

worked on by worker-bee programmers

Page 6: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java as a Worse C++

Slow, slow, and slow compared w/ C/C++ Despite garbage collection, you can still

have memory problems Neither C++ nor Java retains backward

compatibility w/ old code. Ridiculous class libraries...complex

operations for simple tasks. Have to use their package/directory

structure...like it or not.

Page 7: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java Hello World

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello, World");

}

} Must be in a HelloWorld.java Each .java can have its own main() Compile .java to .class with javac Run .class with java, or build a .jar

Page 8: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java Hello World

Notice how you can't write code outside a class, and can't write a class except in its proper file...but you are able to run main() even though there is no instance of class HelloWorld.

Static class functions fly in the face of “pure OOP”. Also, Java's built-in types (like int) are not objects, so “more pure than C++” does not mean “pure OO”

Page 9: Java for C++ Programmers Clint Jeffery University of Idaho jeffery@uidaho.edu

Java Types

byte, short, int, long, float, double, boolean, char (16-bit, Unicode)–Precision/size generally guaranteed

across platforms Arrays – size fixed at creation Objects – instances of a class. Lots of

important standard classes, like strings