Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lecture 2: Computers, Programs, and Your First Java Program Michael Hsu CSULA What is a computer? Input Device Output Device http://www.cs.rpi.edu/academics/courses/fall09/os/c01/01-06.jpg Content summarized from Liang, Introduction to Java Programming 10th edition instructor slides Jargons to Know Programs: Known as software, instructions to the computer You telling what the computer to do Written using programming languages Examples: Your operating system Web browsers, anti-virus software, device drivers, android apps, Skype, Steam, video games Algorithm: A series of steps/rules to be followed Examples: Rubik’s cube algorithms, Sieve of Eratosthenes Standard input/output: Preconnected input and output communication channels between a computer program and its environment when it begins execution How is Data Stored on the computer? Zeroes and ones Usually mapped to memory addresses More Info: Memory address http://en.wikipedia.org/wiki/Computer_data_storage Memory content . . . . . . 2000 01001010 Encoding for character ‘J’ 2001 01100001 Encoding for character ‘a’ 2002 01110110 Encoding for character ‘v’ 2003 01100001 Encoding for character ‘a’ 2004 00000011 Encoding for number 3 Programming Languages Machine language Primitive instruction built into every computer in the form of binary code Difficult to read/understand/modify Add two numbers: 1101101010011010 Platform dependent Assembly language Make programming easier (lol still hard) Since computers can’t understand it, we need an assembler (also a program) to convert assembly language program to machine code. Example: ADDF3 R1, R2, R3 Platform dependent, you have to write different code for different processors Pokemon gold/silver is written in assembly by four people Assembler NASM Assembly Language Program Example to Print “Hello, World” ; ---------------------------------------------------------------------------------------; Writes "Hello, World" to the console using only system calls. Runs on 64-bit Linux only. ; To assemble and run: ; ; nasm -felf64 hello.asm && ld hello.o && ./a.out ; ---------------------------------------------------------------------------------------global _start section .text _start: ; write(1, message, 13) mov rax, 1 ; system call 1 is write mov rdi, 1 ; file handle 1 is stdout mov rsi, message ; address of string to output mov rdx, 13 ; number of bytes syscall ; invoke operating system to do the write ; exit(0) mov eax, 60 ; system call 60 is exit xor rdi, rdi ; exit code 0 syscall ; invoke operating system to exit message: db "Hello, World", 10 ; note the newline at the end http://cs.lmu.edu/~ray/notes/x86assembly/ High Level Programming Languages Much, much easier to write Greater abstraction Allows better productivity For example, in the next slide, you do function/method calls instead of direct memory manipulation like assembly Less lines of code to write, less lines to debug More Info: http://en.wikipedia.org/wiki/High-level_programming_language Printing “Hello, World” in different high level languages NOTE: these are not complete programs Java: Sytstem.out.println("Hello, World"); C++: Python 3: std::out << “Hello, World”; print “Hello, World“ C#: System.Console.WriteLine("Hello, World"); Popular High-Level Languages Language Description Ada Named for Ada Lovelace, who worked on mechanical general-purpose computers. The Ada language was developed for the Department of Defense and is used mainly in defense projects. BASIC Beginner’s All-purpose Symbolic Instruction Code. It was designed to be learned and used easily by beginners. C Developed at Bell Laboratories. C combines the power of an assembly language with the ease of use and portability of a high-level language. C++ C++ is an object-oriented language, based on C. C# Pronounced “C Sharp.” It is a hybrid of Java and C++ and was developed by Microsoft. COBOL COmmon Business Oriented Language. Used for business applications. FORTRAN FORmula TRANslation. Popular for scientific and mathematical applications. Java Developed by Sun Microsystems, now part of Oracle. It is widely used for developing platformindependent Internet applications. Pascal Named for Blaise Pascal, who pioneered calculating machines in the seventeenth century. It is a simple, structured, general-purpose language primarily for teaching programming. Python A simple general-purpose scripting language good for writing short programs. Visual Basic Visual Basic was developed by Microsoft and it enables the programmers to rapidly develop graphical user interfaces. Why Should I know About Assembly At All? Understand the struggles of your predecessors Debugging programs written in C/C++ using code dumps Reverse engineering Often without source code Stepping through assembly instructions using tools such as ollydbg Optimizations that require low level code Space/performance constraints Fitting your code/data on a Gameboy cartridge Interpreting/Compiling Source Code A program written in a high-level language is called a source program or source code. Because a computer cannot understand a source program, a source program must be translated into machine code for execution. The translation can be done using another programming tool called an interpreter or a compiler. Interpreting Source Code An interpreter reads one statement from the source code, translates it to the machine code or virtual machine code, and then executes it right away, as shown in the following figure. Note that a statement from the source code may be translated into several machine instructions. There are more nuances about different types of interpreters, etc. Do more research online. Compiling Source Code A compiler translates the entire source code into a machine-code file, and the machine-code file is then executed, as shown in the following figure. Why Java For This Course? Our whole sequence of classes uses Java, it’s part of the system CS201, CS202, CS203 CS320, CS520 Relatively easy to learn compared to C/C++ Still very popular with lots of users http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html History of Java http://www.oracle.com/technetwork/java/javase/overview/javahistoryindex-198355.html Developed by Sun Microsystems as an alternative to C++/C Garbage collection Pioneers of web development Sun Microsystems acquired by oracle Use widely in corporate environments, web servers Minecraft, Android HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Creating, Compiling, and Running Programs Compiling Java Source Code "Write once, run anywhere" (WORA) Remember machine code is platform dependent Compiler compiles the code, can only run on that platform The Java Virtual Machine(JVM) What if we don’t compile for each different platform, but use a virtual machine , and compile for that machine instead? Genius! The Java compiler compiles your program into bytecode The bytecode can then be run on any JVM on any platform Compile and Running a Java Program Compiling and Running HelloWorld.java The name of the source file is “HelloWorld.java” Change directory to the folder where the source file is in Compile the source code into java bytecode: javac HelloWorld.java Execute the generated .class bytecode file java HelloWorld NOTE: without the .java extension Anatomy of a Java Program Class name Main method Statements Statement terminator Reserved words Comments Blocks Class Name Every Java Program must have at least one class. Each class has a name Use upper camel case by convention Capitalize the first character of each word Examples: HelloWorld, WelcomeHome, ThisIsAnExample, Hello public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } The Main Method A method is a set of code which is referred to by name and can be called (invoked) at any point in a program simply by utilizing the method's name. In order to run a class, the class must contain a special method named main. The program is executed from the main method. It has to look exactly like this: public static void main(String[] args) Remember, computers are stupid For now, all your classes will contain the main method. Statement A statement represents an action or a sequence of actions The highlighted statement writes Hello World to standard output: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Notice the statement ends with a semicolon: Every statement in Java ends with a semicolon(;). Reserved Words Reserved words or keywords are words that have a specific meaning to the compiler and cannot be used for other purposes in the program. For example, when the compiler sees the HelloWorld class, it understands that the word after class is the name for the class. In the example below, the reserved words are highlighted in red public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Blocks A pair of braces ({ }) in a program forms a block that groups components of a program: public class Test { public static void main(String[] args) { System.out.println("Welcome to Java!"); } } Class block Method block Special Symbols Character Name {} () [] // " " ; Description Opening and closing braces Opening and closing parentheses Opening and closing brackets Double slashes Denotes a block to enclose statements. Opening and closing quotation marks Semicolon Enclosing a string (i.e., sequence of characters). Used with methods. Denotes an array. Precedes a comment line. Marks the end of a statement. How Do I Have Quotes as Part of the String? When an escape sequence is encountered in a print statement, the compiler interprets it accordingly. For example, if you want to put quotes within quotes you must use the escape sequence, \", on the interior quotes. To print the sentence: She said "Hello!" to me. you would write: System.out.println("She said \"Hello!\" to me."); Escape Sequences Escape Sequence Description \t Insert a tab in the text at this point. \b Insert a backspace in the text at this point. \n Insert a newline in the text at this point. \r Insert a carriage return in the text at this point. \f Insert a formfeed in the text at this point. \' Insert a single quote character in the text at this point. \" Insert a double quote character in the text at this point. \\ Insert a backslash character in the text at this point. Examples EscapeSequence.java Programming Conventions Why follow conventions? Won’t make my eyes bleed I look at all your assginements I will take off points if you don’t. Easier to read and maintain Lots of APIs and frameworks rely on proper naming conventions Maven, Expression Langague, etc Appropriate Comments Comments at the beginning of your code to state the purpose of the program Your source code should be self-documenting If it can be confusing to the reader, add inline comments Comments Example /* CS201 * Spring 2015 * Example 1 */ public class HelloWorld { //Write Hello, World to standard output public static void main(String[] args) { System.out.println("Hello, World"); } } Naming Conventions Choose meaningful and descriptive names. Length of name is no longer an issue, since most editors support autocomplete Class names: Upper Camel Case Capitalize the first letter of each word in the name. For example, the class name ComputeExpression. Proper Indentation and Spacing The machine doesn’t care whether you indent it or not. In fact, compressing everything to one line saves a lot of space Indentation and spacing is used so your code is readable. Use Indentation to show different levels of the code block/structure Generally two spaces per level, or you can use tabs In fact, languages like python make it mandatory, or it won’t even compile Use a plugin for your editor to automate the process. I’m not too picky on the style, as long as it’s readable Readable Code public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Unreadable Code public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World"); } } Conventions Grading Criteria If you don’t follow conventions, I will take off up till 20% of your lab grade depending on the offense. Programming errors Syntax Errors Runtime Errors Detected by the compiler, won’t compile at all Causes the program to abort Logic Errors Produces incorrect result Most difficult to debug Syntax Error public class Test { publi static void main(String[] args) { System.out.println("lol, you can't spell"); } } What is wrong with this code? Runtime Errors public class ShowRuntimeErrors { public static void main(String[] args) { System.out.println(1 / 0); } } What is wrong with this code? Logic Errors public class CalculateAreaOfTriangle { public static void main(String[] args) { System.out.println("Base is 20, height is 10"); System.out.println("Area is: "); System.out.println(20 + 10); } } What is wrong with this code? Reading Error Messages Pay attention to the line number Understand what type of error it is Read your own code and find the problem. At this stage, it is most likely a problem with your code or your environment setup, Java is not the problem. More Info http://www.dummies.com/how-to/content/tackling-error-messages-in-javaprogramming.html Lecture Code Examples: https://github.com/mhsu0020/CSULA-CS201-Spring2015/ GitHub is a popular Git repository hosting service Git: A popular version control software Allows you to keep track of your code changes and collaborate with others Go to the folder for the week, click on the source file, then click raw. You can then right click and save the file. Remember to change the extension to .java If you’re feeling adventurous, you can setup git/github client on your machine and directly pull from the repository Check out the git and github tutorials from the course webpage resource section Reminder: Lab 1 due next Thursday before class Follow the JDK setup guide on the course website so you can work on the labs