Object – Oriented System Design
Lab #01
Contents
• Java language & programs
• Variable in Java
• String in Java
2
Java Language
• Java is an Object Oriented Programming language (OOP)
– Objects can perform actions
– Objects are affected by the actions of other objects
– The actions of Objects are known as methods
– Same types of Objects are said to be in the same Class
• Java Applications
– Java classes with a main method
3
Identifiers
• Identifiers are names for variables, classes, etc.
• Must not start with a digit, all the characters must be letters,
digits or the underscore symbol
• Good ones are compact, but indicate what they stand for
– radius, width, height, length
• Bad ones are either too long
– theRadiusOfTheCircle
– theWidthOfTheBoxThatIsBeingUsed
– the_width_of_the_box_that_is_being_used
• Or too short
– a, b, c, d, e
• Good identifiers will help understand your program!
4
Java Language (Contd)
Identifiers must not start with a digit
All letters must be letters, digits or underscore 4
Convention:
• for variables, objects, methods the first
letter is always lowercase
• for classes the first letter is Uppercase
• subsequent words start with an uppercase
letter. E.g. topSpeed
5
Keywords
• Some words are reserved, and can’t be used as identifiers
// Purpose: display a quotation in a console window
public class DisplayForecast {
// method main(): application entry point
public static void main(String[] args) {
System.out.print("I think there is a world market for");
System.out.println(" maybe five computers.");
System.out.println(" Thomas Watson, IBM,1943.");
}
}
6
Variables
• We’ve seen variables before in math
– y = mx + b
– Here y, m, x, and b can hold any value
• To store things in a computer program, we also use variables
• Example: 5
x
– int x = 5;
– This defines/declares an integer variable with value 5
• The variable is x
• The type is int
7
Variables (Contd)
• An integer variable can only hold integers
– In other words, it can’t hold 4.3
• To hold float point values, we use the double type
– double d = 4.3;
• Same with
4.3
– double d; d
– d = 4.3;
• The variable is d
• The type is double
8
Variables (Contd)
• Assignment operator =
– Allows the variable to be updated
target = expression;
Name of previously Expression to be
defined object evaluated
• Consider
– int j = 11;
– j = 1985;
9
Primitive variable assignment
• Consider
1
a
– int a = 1; aSq u ared
1
int aSquared = a * a; 5
a = 5;
a
aSquared = a * a; aSq u ared 25
• Consider b
10
– int b = 10; c
6
int c = b – 4;
10
Operators +=, -=, *=, ++, --
15
int x = 15; x
20
x += 5; x = x + 5; x
10
x -= 10; x = x - 10; x
x *= 5; x = x * 5; x 50
x++; x = x + 1; x 51
x--; x = x - 1; x
50
11
Increment/Decrement Operations
• You can do a pre-increment, or a post-increment
Pre Post
++x; x++;
--x; x--;
• Difference?
12
Printing Variables
• To print a variable to the screen, put it in a
System.out.println() statement:
– int x = 5;
– System.out.println(“The value of x is “ + x);
• Important points:
– Strings are enclosed in double quotes
– If there are multiple parts to be printed, they are separated by a plus sign.
This will automatically concatenate the parts.
13
Variables must be declared before use
• The following code will not work:
– x = 5;
– System.out.println(x);
• Java requires you to declare x before you use it
14
You can only declare variables once
• The following code will not work:
– int x = 5;
– int x = 6;
• Java can have only one variable named x
– So you can’t declare multiple variables with the same name
15
Variable Initialization
• Consider the following code:
– int x;
– System.out.println(x);
• What happens?
• Error message:
– variable x might not have been initialized
• Java also requires you to give x a value before you use
it
16
Primitive variable types
• Java has 8 primitive types:
– float
floating point numbers
– double
– boolean two values: true and false
– char a single character
– byte
– short
integer numbers
– int
– long
17
Primitive real (floating-point) types
• A float takes up 4 bytes of space
– Has 6 decimal places of accuracy: 3.14159
• A double takes up 8 bytes of space
– Has 15 decimal places of accuracy:
3.14159263538979
18
Primitive integer types
Type Bytes Minimum value Maximum value
byte 1 -27=-128 27-1=127
-215= 215-1=
short 2
-32,768 32,767
int 4 -231=-2,147,483,648 231-1=2,147,483,647
-263=-9,223,372,036, 263-1=9,223,372,036,
long 8
854,775,808 854,775,807
19
Type Casting
• Consider the code. Is it possible to assign the value of
a variable of one type to
a variable of another type?
• Yes
– You can assign the value of any type to that of another type that
is lower in the following list:
– byte < short < int < long < float < double
20
Primitive Boolean type
• The boolean type has only two values:
– true
– false
• There are boolean-specific operators
– && is and
– || is or
– ! is not
21
Constants
• Consider the following:
– final int x = 5;
• The value of x can NEVER be changed!
– The value assigned to it is “final”
• This is how Java defines constants
• Constants have a specific naming scheme
– MILES_PER_KILOMETER
– All caps, with underscores for spaces
22
Expressions
• What is the value used to initialize expression
– int expression = 4 + 2 * 5;
• What value is displayed
– System.out.println(5 / 2.0);
• Java rules in a nutshell
– Each operator has a precedence level and an associativity
• Operators with higher precedence are done first
– * and / have higher precedence than + and -
– When floating-pointis used, the result is floating point
23
Question on expressions
• Does the following statementcompute the average of double
variables a, b, and c? Why or why not?
– doubleaverage = a + b + c / 3.0;
24
Java operators
• The following are the common operators for ints:
– +-/*%
– Division /
• 6 / 2 yields 3
• 7 / 2 yields 3, not 3.5
• Because everything is an int, the answer is an int
– Modulus is %
• Returns the remainder
• 7 % 2 yields 1
• 6 % 2 yields 0
• Floats and doubles use the same first four operators
– +-/*
– 7.0 / 2.0 yields 3.5
– 7.0 / 2 yields 3.5
– 7 / 2.0 yields 3.5
– 7 / 2 yields 3
25
Java operators (Contd)
• Booleans have their own operators
– && is AND
• Only true when both operands are true
• true && true yields true
• false && true yields false
– || is OR
• True when either of the operands (or both) are true
• true || false yields true
• false || false yields false
– ! is NOT
• Changes the value
• !true yields false
• !false yields true
26
Self-Test (1)
❖ 프로젝트 명: Project01_1
❖ git commit -m “Project01_1”
• counter와 totalDistance 2개의 변수를 선언할 것
• counter는 int type이며 3으로 초기화 되고,
totalDistance는 int type이며 15로 초기화 된다.
• quotient와 remainder 2개의 변수를 int type으로 선언할 것
• quotient은 totalDistance를 counter로 나눴을 때의 몫
remainder는 totalDistance를 counter로 나눴을 때의 나머지 일 때
quotient과 remainder를 출력하는 프로그램을 작성할 것
27
Self-Test (1)
• Git을 이용한 Self-Test 수행 과정
1. Self-Test의 Template이 저장되어 있는 Template 프로젝트 Clone
2. Eclipse를 통해 Template 프로젝트 Import
3. Self-Test 코드 작성
4. Eclipse를 통해 작성한 프로젝트 Export
5. 각자 학번에 해당하는 프로젝트 Clone
6. Clone한 프로젝트를 통해 Git에 작성한 Export한 프로젝트 업로드
28
Self-Test (1)
1. Self-Test의 Template이 저장되어 있는 Template
프로젝트 Clone
-hconnect 접속 후
Template 프로젝트
클릭.
29
Self-Test (1)
Template 프로젝트의 URL 복사.
30
Self-Test (1)
• Git 사용자 설정하기
$ git config --global user.name “2018103364”
$ git config --global user.email “
[email protected]”
– user.name은 학번
– user.email은 GitLab에 등록한 email (기본값: 학번 +
@hanyang.ac.kr ))
31
Self-Test (1)
• Template 클론하기.
- Console 혹은 Bash를 열어 Template를 저장할 폴더까지 이동.
- git clone 명령어 입력 후 복사한 URL 입력 후 엔터.
- URL은 마우스 오른쪽 클릭 후 paste
.
32
Self-Test (1)
• git clone을 할 때 요구하는 Username은 학번, Password
는 GitLab webpage에서 설정한 password로 입력.
(단, 비밀번호를 주의해서 칠 것)
33
Self-Test (1)
• Template 클론하기.
- 설정한 경로로 가서 Template 폴더가 있는걸 확인.
34
Self-Test (1)
2. Eclipse를 통해 Template 프로젝트 Import
-이클립스를 실행한 뒤 File –> Import
클릭
35
Self-Test (1)
• 이클립스에서 Import
- General 안에 Existing Projects Into Workspace 선택 후 Next
36
Self-Test (1)
• 이클립스에서 Import
- Select root directory 오른쪽에 Browse 클릭 후 클론 받은 폴더를 지정,
해당하는 프로젝트의 폴더를 체크한 후 Finish
37
Self-Test (1)
3. Self-Test 코드 작성
• counter 와 totalDistance 2개의 변수를 선언할 것
• counter는 int type이며 3으로 초기화 되고,
totalDistance는 int type이며 15로 초기화 된다.
• quotient와 remainder 2개의 변수를 int type으로 선언할 것
• quotient은 totalDistance를 counter로 나눴을 때의 몫
remainder는 totalDistance를 counter로 나눴을 때의 나머지
• 정상 출력 결과
38
Self-Test (1)
4. Eclipse를 통해 작성한 프로젝트 Export
– 업로드하고자 하는 프로젝트
오른쪽 마우스 버튼
– Export 클릭
39
Self-Test (1)
• General -> File System -> Next
40
Self-Test (1)
• Browse… -> 프로젝트를 내보낼 경로 설정 -> Finish
41
Self-Test (1)
• 설정한 경로에 업로드 해야 하는 프로젝트 폴더가 생성됨
42
Self-Test (1)
5. 각자 학번에 해당하는 프로젝트 Clone
• 생성되어 있는 자신의 Git repository clone 받기
$ git clone http://hconnect.hanyang.ac.kr/2019_ITE2037_12340/2019_ITE2037_학번.git
• Git clone 주소는 GitLab webpage의 해당 프로젝트 메인화면으로 이동하여 확인 가능
43
Self-Test (1)
6. 한 프로젝트를 통해 Git에 작성한 Export한 프로젝트
업로드
• Clone받은 폴더로 이동 (처음에는 텅 빈 디렉토리)
$ cd YEAR_ITE0000_20XXXXXXXX
• 업로드하고자 하는 파일을 Clone 받은 폴더로 복사 (해당 예시에서는 test.c)
$ git status
• 현재 git 관리 상태를 확인하면 test.c가 관리되지 않는 상태로 표시된다.
44
Self-Test (1)
• 현재 디렉토리에 있는 모든 추가/수정된 파일들을 Stage 영역으로 이동
(test.c가 git에 의해 관리됨)
$ git add .
• 추가/수정된 파일을 커밋(Local repository에 저장)
$ git commit -m “Project01_1”
• 커밋된 내용을 Remote repository로 전송
$ git push
45
Self-Test (1)
• git push를 통해 Remote로 전송된 파일은 GitLab webpage에서 확인 가능하다
46
The String Class
• The String class is used to store and process strings
of characters
– A string is a sequence of characters gathered together, like the
word “Hello”, or the phrase “practice makes perfect”
– String creation:
• String s = “Java is fun.”;
• String s = new String(“Java is fun.”);
47
Working with Strings
• A convenience is in String concatenation:
– String a = “hello “;
String b = “world”;
String c; c
Hello World
c = a + b;
• This returns a new string c that is a with b added to it at the
end The + operator is widely used in print statements
• We accept that we’re not arithmetically adding these two
Strings.
48
Working with Strings (Contd)
• Take the following example, where we are concatenating a String
a with an int i:
– String a = “Ten “;
int i = 4;
String c; Ten 4
c
c = a + i;
49
Working with Strings (Contd)
• Anytime you concatenate a String with another type,
the other type is first converted into a String and then
the two are concatenated. Really, this is done using
method toString()which every object inherits from
Object
– c = a + i; // c = a + i.toString();
50
Working with Strings (Contd)
– String a = “”
int b = 2;
int c = 3;
a = b + c;
• The above statement is a Syntax error. To force the conversion to
String, at least one of the operands on the + sign must be a String.
51
Sub-Strings (1)
• You can extract a substring from a larger String object
with the substring()method of class String.
The first argument 0, is the 1st
character of the substring that
– String greet = “Howdy”; you do want to copy.
String s = greet.substring(0, 4);
Howdy
The 4 is the 1st character that
you don’t want to copy.
0 1 2 3 4
• So… s is equal to “howd”
52
Sub-Strings (2)
• Consider
• What is output?
– Month is August.
53
Replacing Substrings
• This returns a string with the specified substrings
replaced
– String b = “hacker heaven”;
String n = “”;
n = b.replace(‘h’, ‘H’);
• Note: This does not change the original, It returns a
new String object in which the changes have been
made.
54
Some more methods
55
Some more methods (Contd)
56
Some more methods (Contd)
57
String method examples
// index 012345678901
String s1 = “Stuart Reges”;
String s2 = “Marty Stepp”;
System.out.println(s1.length()); // 12
System.out.println(s1.indexOf("e")); // 8
System.out.println(s1.substring(7, 10)); // “Reg”
String s3 = s2.substring(1, 7);
System.out.println(s3.toLowerCase()); // “arty s”
• Given the following string:
– String book = “Hello Java Programs";
– How would you extract the word “Java”?
58
String method examples (Contd)
• What will be the output?
59
Console Output
• Output to the console can be performed using the
System.out.println(<arguments>)
• There are various methods
associated with printing.
– Print()
– Println()
– Printf()
• Each accepting different parameters
60
Print vs. Println
• If the print method is used, then the cursor is not
moved to a newline.
61
Print vs. Println (Contd)
• If the println method is used then the cursor is
moved to a new line
62
Formatting Output
• The output of the code is the entire float given to 15 decimal
places
• Java allows us to format out output using one of two ways
– Format() method of the string class.
– Printf() method of the System.out object.
• The following will result in an error
System.out.printf("Hello this is also the value of pi %f formatted %4.2f", pi);
63
Formatted specifiers
64
Formatting Output (Contd)
65
Console Input
• It is just as important to input information into your
programs as it is to output information.
• Prior to Java 5.0 there was no simple method to read
data from the keyboard
– Programmers needed to create a BufferedReader
– Programmers also had to be aware of and handle exceptions that may
occur.
66
Console Input (Contd)
• Java allows for keyboard input using the Scanner class.
• Scanner is a part of the java.util package
• Before you can use the Scanner class you must first import that
package.
67
Importing Packages
• Packages are collections of “pre-compiled” classes that can be
utilized.
• We must import the package containing the class we would like
to use before we can use that class.
– This is done by using the keyword import and the package name at the
start of you code.
The name of the class you would like
to import.
If * is used then we can use any class
Name of the package containing in the package.
the class we wish to use.
68
Console Input (Contd)
• To use the Scanner within you applications you must import the
Scanner class as follows
– import java.util.Scanner;
• A Scanner object can be created by declaring a variable as type
Scanner
– Scanner keyboard = new Scanner(System.in);
69
Console Input (Contd)
• The Scanner object provides us with various methods for
reading input.
70
Console Input (Contd)
• int intValue = keyboard.nextInt();
• double dValue = keyboard.nextDouble();
Reads one integer or double value.
Each number separated by a whitespace is
considered different.
• Multiple inputs must be separated by whitespace and read by
multiple invocations of the appropriate method
– Whitespace is any string of characters, such as blank spaces, tabs, and line
breaks that print out as white space
– String str = keyboard.next ();
Reads a word/string. – A word is a contiguous string
of characters not including whitespaces.
71
Console Input (Contd)
• NextLine()
– This method reads the remaining strings up to the end of the line and
discards the eol (end of line) character.
72
Scanner Class
• It is possible to change the delimiters used by the scanner class
• This changes the delimiters from being whitespaces to the user-
specified value
– Scanner keyboard2 = new Scanner(System.in);
– Keyboard2.useDelimiter("##");
73
Comments
• Double slashes ( //) are used in the Java programming language,
and tell the compiler to treat everything from the slashes to the
end of the line as text.
• Instead of double slashes, you can use C-style comments ( /* */)
to enclose one or more lines of code to be treated as text.
• Comments are ignored by the compiler but are useful to other
programmers
74
Self-Test (2)
❖ 프로젝트 명: Project01_2
❖ git commit -m “Project01_2”
• String type 변수인 name을 선언한 뒤, 자신의 영어 이름으로 값을 초기화 할 것(영
어 이름은 소문자로)
• String type 변수인 greeting1과 greeting2를 각각 “Hello”와 “nice to meet you”로 초기
화할것
• String type 변수 uName을 선언한 뒤, 대문자로만 구성된 자신의 영어 이름으로 값
을 초기화 할 것(이 때 직접 적지 않고 name 변수와 String class의 method를 활용할
것)
• greeting1, name, greeting2 순으로 3개의 변수를 concatenation하여 출력할 것 (각 변
수 사이에는 띄어쓰기)
• name의 길이를 String class의 method를 활용하여 출력할 것
• String class의 method를 활용하여 name과 uName이 같은지 출력할 것
• String class의 method를 활용하여 name과 uName이 대소문자를 무시했을 때 같은
지 출력할 것
75
Self-Test (2)
• 정상 출력 결과
76