- Aggregation - UML diagram - Self-Referential …ipc202/wiki.files/Class_Java_8.pdfAggregation...
Transcript of - Aggregation - UML diagram - Self-Referential …ipc202/wiki.files/Class_Java_8.pdfAggregation...
1
- Aggregation- UML diagram- Self-Referential Classes- Generisity
Class Circlepublic class Circle{
private double xCenter; // x center coordinateprivate double yCenter; // y center coordinate private double radius; // circles radius
public Circle(double xCenter, double yCenter, double radius ){
this.xCenter = xCenter;this.yCenter = yCenter;this.radius = radius;
} // class Circle constructor
// rest methods...} // class Circle 2
Class Pointpublic class Point {
private double x; // x coordinateprivate double y; // y coordinatepublic Point(double x, double y){
this.x = x;this.y =y;
} // class Point constructorpublic double getX( ) {
return this.x;}
public void printPoint() {System.out.println( "x = “ + this.x + "y = “ + this.y);
} // printPoint()// rest methods
} // class Point 3
Aggregation (הכלה)public class Circle{
private Point center; // another object !private double radius; // circles radiuspublic Circle( Point center, double radius ){
this.center = center;this.radius = radius;
} // class Point constructorpublic Point getCenter() {
return this.center;}public double getRadius(){
return this.radius;}
// rest methods
Aggregation is a relationship between two classes.The aggregate class contains a reference to another class.
These methods use reference center toanother object Point .
Aggregation – example 1
Circle (c1)
center radius
p1 5.0
c1
Point (p1)
x y
7.4 9.5
p 1
Point p1 = new Point(7.4,9.5); // create new point
Circle c1 = new Circle(p1,5.0); // create new circle : reference to object p1
5
Access to point coordinatespublic static void main(String[ ] args){
Point p1 = new Point(7.4,9.5); // create new pointCircle c1 = new Circle(p1,5.0); // create new circlePoint c1Center = c1.getCenter();double c1CenterX = c1Center.getX();double c1CenterY = c1Center.getY();double c1Radius = c1.getRadius();System.out.println(“x= “+ c1CenterX+” y= “+c1CenterY + “ r= “+ c1Radius);
// another choicec1CenterX = c1.getCenter(). getX();c1CenterY = c1.getCenter(). getY();p1.printPoint();
} // main
We use getter methods from Point object
This program generates the following output:x = 7.4 y = 9.5 r = 5.0x = 7.4 y = 9.5
We use getter methods from Circle object
6
Rectangle definition
7
Rectangle is any quadrilateral with four right angles.The word rectangle comes from the Latin rectangulus, which is a combination of rectus ( right ) and angulus ( angle ).
bottomLeft
topRight
x - axis
y - axis
bottomLeftx - axis
y - axis
width
height
Class Rectangle
8
public class Rectangle {private Point bottomLeft;private Point topRight;public Rectangle (Point bottomLeft, Point topRight){
this.bottomLeft = bottomLeft;this.topRight = topRight;
} // constructor1public Rectangle (Point bottomLeft, double width, double height){
this.bottomLeft = new Point(bottomLeft);this.topRight = new Point(bottomLeft.getX() + width, bottomLeft.getY() + height);
} // constructor2public double getArea()
{double width = this.topRight.getX() - this.bottomLeft.getX();double height = this.topRight.getY() - this.bottomLeft.getY();return width * height;
} // getArea
Class Rectangle, cont.
9
public double getPerimeter() {
double width = this.topRight.getX() - this.bottomLeft.getX();double height = this.topRight.getY() - this.bottomLeft.getY();return (2 * width) + (2 * height);
} // getPerimeterpublic void move (double deltaX, double deltaY){
this.topRight.setX(this.topRight.getX() + deltaX);this.topRight.setY(this.topRight.getY() + deltaY);this.bottomLeft.setX(this.bottomLeft.getX() + deltaX);this.bottomLeft.setY(this.bottomLeft.getY() + deltaY);
} // movepublic String toString() {
return "Rectangle:" + "\n" +"bottom-left point : " + this.bottomLeft.toString() + "\n" +"top-right point : " + this.topRight.toString();
} // toString} // class Rectangle
Class Rectangle, cont.public static void main(String[] args) {
Point p1 = new Point(2,1);Point p2 = new Point(7,5);Rectangle rect1 = new Rectangle(p1,p2);System.out.println(rect1);double width = 6.0;double height = 3.0;Rectangle rect2 = new Rectangle(p1,width,height);System.out.println(rect2);System.out.println("area = " + rect1.getArea());System.out.println("perimeter = "+ rect2.getPerimeter());
} // main
10
Rectangle:bottom-left point : x = 2.0 y =1.0top-right point : x = 7.0 y = 5.0Rectangle:bottom-left point : x = 2.0 y =1.0top-right point : x = 8.0 y = 4.0area = 20.0perimeter = 18.0
Encapsulation (הכמסה)• One of the important object-oriented techniques is hiding the
data הסתרת מידע ) ) within the class, and making it available only through the methods.
• This technique is often known as encapsulation, because it seals the class's data (and internal methods) safely inside the "capsule" of the class, where it can be accessed only by trusted users- i.e., by the methods of the class.
• The most important reason is to hide the internal implementation details of your class. If a variable is visible only in your class, you have to document it.
11
Rectangle
Point bottonLeft
Point topRight
Rectangle( Point bottonLeft, Point topRight)
Rectangle( Point bottonLeft, double width, double height)
double getArea()
double getPerimeter()
void move(double deltaX, double deltaY)
String toString()
UML Diagram – Example1• UML stands for Unified Modeling Language. It's a way to
represent object-oriented applications using graphical diagrams.
• UML shows the classes of the system, their relationships, and the operations and attributes of the classes.
12
Point
public double x
public double y
Point(double x, double y)
double getX()
double getY()
void setX(double x)
void setY(double y)
String toString()
UML Diagram – Example2
13
Lecturer
String name
int depCode
Lecturer(String name,int depCode)
String getName()
void setDepCode( int depCode)
Student
String name
int ID
Lecturer lecturer
Student(String name, int ID, Lecturer lecturer)
String getName()
void setID( int ID)
Lecturer getLecturer()
● UML diagrams allow us to denote the relationshipsbetween classes.
● In a UML diagram we can show the class member variablesand class methods.
Aggregation – example 2
Lecturer
name depCode
Alex 777lect
Student
name ID lecturer
David 1234567 lect
Student
name ID lecturer
Ronit 7654321 lect
s1 s2
14
Lecturer lect = new Lecturer(“Alex”, 777); Student s1 = new Student(“David”, 1234567, lect);Student s2 = new Student(“Ronit”, 7654321, lect);
Array of objects
Student [ ] arr = new Student [ 5 ];
arr[ ]
0 1 2 3 4
null null null null null
arr
arr[ ]
0 1 2 3 4
arr[0] arr[1] null null null
Lecturer lect = new Lecturer(“Alex”, 777); arr[0] = new Student(“David”,1234567,lect);arr[1] = new Student(“Ronit”,7654321,lect);
Student
name ID lecturerDavid 1234567 lect
Student
name ID lecturerRonit 7654321 lect 15
Insertion sort - reminderThe insertion sort algorithm works by inserting each value into a previously
sorted subset of the list.
3 9 6 1 2
3 9 6 1 2
3 6 9 1 2
1 3 6 9 2
1 2 3 6 9
3 is sorted.Shift nothing. Insert 9.
3 and 9 are sorted.Shift 9 to the right.Insert 6.
3 ,6 and 9 are sorted.Shift 9,6 and 3 to the right. Insert 1.
1,3 ,6 and 9 are sorted.Shift 9,6 and 3 to the right. Insert 2.
All values are sorted16
Sorting array of objectspublic class Student{
private String name;private int id;public Student( int id, String name){
this.name = name;this.id = id;
} // class Student constructorpublic int getId( ){
return this.id;} // rest methods...
} // class Student
int [ ] arr = { 3, 9, 6, 1, 2 };
for (int i = 1; i < arr.length; i++){
int j = i;int a = arr[i]; while ( j > 0 && arr[j-1] > a){
arr[j] = arr[j-1];j--;
} // block whilearr[j] = a;
} // block for
Insertion sort of integer array
How compare two object values ?
17
Sorting array of objects,cont.public static void insertSort( Student [ ] arr){
for (int i = 1; i < arr.length; i++){
Student val = arr[i]; // reference to arr[i]int j = i;while( j>0 && ( arr[j-1].getId() > val.getId())){
arr[j] = arr [j-1];j--;
} // block whilearr[j] = val;
} // block for} // insertSort
We use only getter methodsto access student ID value
18
Invoke insertSort methodpublic static void main(String[ ] args){
System.out.print("enter number of student ");int num = reader.nextInt();Student [ ] arr = new Student[num];for( int i = 0; i < num; i++){
System.out.print("enter student ID " );int id = reader.nextInt();System.out.print("enter student name " );String name = reader.next();arr[i] = new Student( id, name );
} // forinsertSort(arr); // invoke insertSort methodfor( int j = 0; j < num; j++)
System.out.println("studID = “ + arr[j].getId());} // main
We use getId() getter methodto access j student ID value
19
Class StudList - UML
StudListint MAX_STUDStudent [ ] listint lastPosStudList()void addStud(String name)Student delStud(String name)Student getStud(String name)void printStudList()
UML diagram to define class StudList
Class name
Class variables
Class methods
Constructor
20
Class StudList - implementationpublic class StudList{
public static final int MAX_STUD = 100;private Student [ ] list; // array of Student typeprivate int lastPos; // last free positionpublic StudList(){
this.list = new Student[MAX_STUD]; this.lastPos = 0;
} // StudList class constructorpublic void addStud( Student st ){
this.list[ this.lastPos ] = st;this.lastPos++;
} // addStud
21
This method adds newstudent to StudList class.
Class StudList – implementation,cont.public Student delStud(String name){
Student st = null;int i = 0;while( i < this.lastPos && this.list[i].getName().compareTo(name) != 0 )
i++;if(i < this.lastPos){
st = this.list[i];for( int k = i+1; k < this.lastPos; k++ )
this.list[k-1] = this.list[k];this.lastPos--;this.list[this.lastPos] = null;
}return st;
} // delStud
22
This method removes the student from StudList class and returns a reference to removed value. If the student does not exist in the class , the method returns null.
Class StudList – implementation,cont.public Student getStud( String name ){
Student st = null;int i = 0;while( i< this.lastPos && this.list[i].getName().compareTo(name) != 0 )
i++;if(i < this.lastPos)
st = this.list[i];return st;
} // getStudpublic void printStudList(){for( int i = 0; i< this.lastPos; i++ )
System.out.println( "ID = “ + this.list[i].getId() + " name = “ + this.list[i].getName());} // printStudList
} // class StudList
23
This method returns a reference to a student ifhis name exists in the StudList class.If the student does not exist in the class , the method returns null.
Class StudList – delSdud testpublic static void main(String[ ] args) {
System.out.print( “Enter number of student " );int num = reader.nextInt( );StudList stL = new StudList( );for( int i = 0; i < num; i++) {
int id = reader.nextInt();String name = reader.next();Student st = new Student(id,name);stL. addStud(st); } // for
stL.printStudList( ) ;System.out.print(“Enter student name to delete " );String nmd = reader.next( ) ;Student d = stL.delStud(nmd);if(d == null)
System.out.println( “Student not found !" );else
System.out.println( “Student “ + nmd + “delete" );stL.printStudList();
} // main24
Class StudList – getStud testpublic static void main(String[ ] args) {
System.out.print( “Enter number of student " );int num = reader.nextInt( );StudList stL= new StudList( );for( int i = 0; i < num; i++) {
int id = reader.nextInt();String name = reader.next();Student st= new Student( id,name);stL. addStud(st); } // for
stL.printStudList( ) ;System.out.print(“Enter student name " );String nmf = reader.next( ) ;Student f = getStud(nmf);if(f == null)
System.out.println( “Student not found ! " );else
System.out.println( “Student “ + nmf + “found" );} // main
25
Self - Referential ClassesA self-referential class contains a reference member that
refers to a class object of the same class type.
public class Node{
private int data; private Node nextNode; public Node( int data ){
this.data = data;} // class Node constructor1public Node( int data,Node nextNode){
this.data = data;this.nextNode = nextNode;
} // class Node constructor2public void setData( int data ){
this.data = data;}
First constructor has only one argument for the item; the next field is set to null.
Field nextNode references a Node object, an object of the same class .
Node object can be created to point to the next Node object.
26
Class Node ,cont.public int getData() {
return this.data;}
public void setNext( Node nextNode ){
this.nextNode = nextNode;}
public Node getNext(){
return this.nextNode;}
public String toString() {
return " " + this.data.toString();}
} // end class Node
Java can link self-referential objectstogether to form such useful data structures as lists, queues, stacks and trees.
This method allows modification of the nextNode field.
27
28
Linked List vs Array
Building a linked list from Node objects
Node n = new Node(9);
Node n1 = new Node(4,n);
Node n2 = new Node(5,n1);
Nodedata nextNode
9 null
n
Node
data nextNode
9 null
Node
data nextNode
4
n1 n
Node
data nextNode
5
Node
data nextNode
4
Node
data nextNode
9 null
n2 n1 n
29
Building a linked list from Node objectspublic static void main(String[ ] args) {
System.out.print("enter the number of nodes ");int num = reader.nextInt(); // num = 5System.out.print("enter the data value ");int data = reader.nextInt();Node n = new Node(data);for( int i = 1; i < num; i++) {
System.out.print("enter the data value ");data = reader.nextInt();n = new Node(data,n);
} // forwhile( n != null ){
String str = n.toString();System.out.println(str);n = n.getNext();
} //while} // main
Input data values:
12345
Output ?
System.out.println(n);
30
Inserting a node in a linked listNode
data nextNode
7
temp
Node
data nextNode
7
Node
data nextNode
5
n Node
data nextNode
4
Node
data nextNode
9 null
Node temp = new Node(7, n.getNext());
n.setNext(temp);
temp
31
Inserted Node
Deleting a node from a linked list
Node
data nextNode
5
Node
data nextNode
4
Node
data nextNode
9 null
n temp
Node
data nextNode
5
Node
data nextNode
4
Node
data nextNode
9 null
n temp
Node
data nextNode
5
Node
data nextNode
4 null
Node
data nextNode
9 null
n temp
1.Node temp=n.getNext();2.n.setNext( temp.getNext() );3.temp.setNext(null); 32
Calculate sum in a linked listpublic static int calcSum( Node n){
int sum = 0;Node currPos = n; // reference to first nodewhile( currPos != null ){
sum = sum + currPos.getData();currPos = currPos.getNext();
} // whilereturn sum;
} // calcSum
33
Max value position in a linked listpublic static Node findMaxPos( Node n){
Node maxPos = n; // searching from this placen = n.getNext();while(n != null ){
if( n.getData() > maxPos.getData() )maxPos = n;
n = n.getNext();} // whilereturn maxPos;
} // findMaxPos34
What are the differences?public class Node{
private int data; private Node nextNode; public Node( int data ){
this.data = data;}
public Node(int data,Node nextNode){
this.data = data;this.nextNode = nextNode;
}
public void setData( int data ){
this.data = data;}
public class Node{
private String data; private Node nextNode; public Node( String data ){
this.data = data;}
public Node(String data,Node nextNode){
this.data = data;this.nextNode = nextNode;
}
public void setData( String data ){
this.data = data;}
35
Genericity (מנגנון הגנריות)• Genericity is a mechanism to specify the types of objects that a
class can work with via parameters passed at declaration-time and evaluated at compile-time.
• Generic programming is the creation of programming constructs that can be used with many different types.
UML diagram to define generic class Node
Node<T>
private T data
private Node<T> nextNode
Node(T x)
Node( T data, Node<T> nextNode)
T getData()
Node<T> getNext()
Void setData( T data)
Void setNext(Node<T> nextNode)
String toString()
constructors
Class variables
Class methods
T is a place holder( מחזיק מקום(
36
Generic class Nodepublic class Node <T>{
private T data; private Node<T> nextNode; public Node( T data ){
this.data = data;} // class Node<T> constructor1public Node(T data, Node<T> nextNode){
this.data = data;this.nextNode = nextNode;
} // class Node<T> constructor2public void setData( T data ){
this.data =data;}
37
Generic class Node, cont.public T getData() {
return this.data;}
public void setNext( Node<T> nextNode ){
this.nextNode = nextNode;}
public Node<T> getNext(){
return this.nextNode;}
public String toString() {
return " " + this.data;}
} // end class generic Node 38
Generic class Node - implementation
Node<Point>
data nextNode
p null
Point p = new Point(4.0,5.0));Node<Point> np = new Node<Point>(p);String s = “Hello”;Node<String> ns = new Node<String>(s);
Point
X Y
4.0 5.0
np Node<String>
data nextNode
s null
ns
String
Hello
39
Generic class Node - implementation,cont.np.setNext(new Node<Point>(new Point(8.0,9.0)));ns.setNext(new Node<String>(“Java”));
Node<Point>
data nextNode
p
Node<Point>
data nextNode
null
np
Point
X Y
4.0 5.0
Point
X Y
8.0 9.0
Node<String>
data nextNode
s
Node<String>
data nextNode
null
ns
String
Hello
String
Java
40
Generic class Node - testpublic static void main(String[ ] args) {
System.out.print( "enter number of student " ); int num = reader.nextInt( ); // num=4System.out.print("enter the name ");String name = reader.next();Node<String> ns = new Node<String>(name);Node<String> startPos = ns; // help variablefor(int i =1; i < num; i++){
System.out.print("enter the name ");name = reader.next();ns.setNext(new Node<String>(name));ns = ns.getNext();
} // forprintClass(startPos); // recursive method (next slide)
} // main
41
Linked list – recursion 1public static void printClass(Node<String> s){
System.out.print(s.getData());if(s.getNext() != null){
System .out.print(" -> ");printClass(s.getNext());
}} // printClass
Input:
OfirGalitDavidRonit
Output:
Ofir -> Galit -> David -> Ronit
Base case
42
Linked list – recursion 2
43
public static int getClassLength(Node<String> s){
if(s.getNext( ) == null)return 1;
return 1 + getClassLength(s.getNext( ));} // getClassLenght
Base case
Recursive method getClassLength returns the length of linked list.
Linked list – recursion 3
public static Node<Integer> getXposition(Node<Integer> pos, int x){
if( pos.getData( ) == x )return pos;
if( pos.getNext( ) == null )return null;
return getXposition( pos.getNext( ), x);} // getPosition
Base case
Recursive method getXposition returns the reference tointeger X value position in the linked list ( null if not found).