CSC ASSIGNMENT on Object Oriented Programming
CSC ASSIGNMENT on Object Oriented Programming
Object Oriented Programming (OOP) is a programming paradigm that focuses on the use of
objects to represent and manipulate data. In OOP, data is encapsulated within objects, and
objects are defined by their properties (attributes) and behaviors (methods). OOP provides
several key concepts that enable developers to write modular, reusable, and maintainable
code.
The main ideas behind Java’s Object-Oriented Programming, OOP concepts include
abstraction, encapsulation, inheritance and polymorphism. Basically, Java OOP concepts
let us create working methods and variables, then re-use all or part of them without
compromising security. Grasping OOP concepts is key to understanding how Java works.
Abstraction. Using simple things to represent complexity. We all know how to turn
the TV on, but we don’t need to know how it works in order to enjoy it. In Java,
abstraction means simple things like objects, classes and variables represent more
complex underlying code and data. This is important because it lets you avoid
repeating the same work multiple times.
Encapsulation. The practice of keeping fields within a class private, then providing
access to those fields via public methods. Encapsulation is a protective barrier that
keeps the data and code safe within the class itself. We can then reuse objects like
code components or variables without allowing open access to the data system-wide.
Inheritance. A special feature of Object-Oriented Programming in Java, Inheritance
lets programmers create new classes that share some of the attributes of existing
classes. Using Inheritance lets us build on previous work without reinventing the
wheel.
Polymorphism. Allows programmers to use the same word in Java to mean different
things in different contexts. One form of polymorphism is method overloading.
That’s when the code itself implies different meanings. The other form is method
overriding. That’s when the values of the supplied variables imply different
meanings. Let’s delve a little further.
OOP concepts in Java work by letting programmers create components that are reusable in
different ways while maintaining security.
Abstraction lets programmers create useful and reusable tools. It enables programmers to
create complex systems by breaking them down into smaller, more manageable components.
For example, a programmer can create several different types of objects, which can be
variables, functions or data structures. Programmers can also create different classes of
objects as ways to define the objects.
For instance, a class of variable might be an address. The class might specify that each
address object shall have a name, street, city and zip code. The objects, in this case, might be
employee addresses, customer addresses or supplier addresses. In addition, abstraction
provides a mechanism for hiding the implementation details of a class or method from the
outside world and providing a simplified interface for clients to interact with. In Java, you
can achieve abstraction through two main mechanisms: abstract classes and interfaces.
1. Abstract Classes: An abstract class is a class that you can’t instantiate and can only
extend by subclasses. Abstract classes can have both abstract and non-abstract
methods. Abstract methods do not have a body and you must implement them by any
subclass that extends the abstract class. Non-abstract methods have a body and you
can directly call them by the subclass.
2. Interfaces: An interface is a collection of methods. You can use it to define a set of
behaviors that a class should implement. A class can implement multiple interfaces,
and all the methods defined in an interface must be implemented by any class that
implements it.
Encapsulation lets us reuse functionality without jeopardizing security. It’s a powerful, time-
saving OOP concept in Java. For example, we may create a piece of code that calls specific
data from a database. It may be useful to reuse that code with other databases or processes.
Encapsulation lets us do that while keeping our original data private. It also lets us alter our
original code without breaking it for others who have adopted it in the meantime.
Access Modifiers
In Java, encapsulation is implemented using access modifiers, which control the visibility of
variables and methods within a class.
Encapsulation enables developers to write cleaner, more organized, and more secure code. By
controlling access to variables and methods, encapsulation promotes good software design
practices and helps to manage the complexity of large-scale projects.
Inheritance is another labor-saving Java OOP concept that works by letting a new class adopt
the properties of another. We call the inheriting class a subclass or a child class. The original
class is often called the parent or the superclass. We use the keyword extends to define a
new class that inherits properties from an old class.
The subclass inherits all the public and protected variables and methods of the superclass, and
it can also define its own variables and methods. This makes it possible to create a hierarchy
of classes, where each subclass inherits from its superclass and adds its own unique features.
Benefits of Inheritance
1. Reusability: By inheriting from a superclass, a subclass can reuse the code and
functionality already defined in the superclass, making it easier to write and maintain
code.
2. Polymorphism: Inheritance allows for polymorphism, where objects of different
subclasses can be treated as objects of the same superclass, making it easier to write
generic code.
3. Flexibility: Inheritance provides a way to add new features to an existing class
hierarchy without modifying the existing code.
Inheritance allows developers to create complex class hierarchies with shared functionality
and unique features. By promoting code reuse, polymorphism, and flexibility, inheritance
enables developers to write more efficient and maintainable code.
Polymorphism in Java works by using a reference to a parent class to affect an object in the
child class. We might create a class called “horse” by extending the “animal” class. That
class might also implement the “professional racing” class. The “horse” class is
“polymorphic,” since it inherits attributes of both the “animal” and “professional racing”
class.
Two more examples of polymorphism in Java are method overriding and method
overloading.
In method overriding, the child class can use the OOP polymorphism concept to override a
method of its parent class. That allows a programmer to use one method in different ways
depending on whether it’s invoked by an object of the parent class or an object of the child
class.
In method overloading, a single method may perform different functions depending on the
context in which it’s called. This means a single method name might work in different ways
depending on what arguments are passed to it.
Benefits of Polymorphism
1. Flexibility: Polymorphism allows for more flexible and adaptable code by enabling
objects of different classes to be treated as if they are of the same class.
2. Code reuse: Polymorphism promotes code reuse by allowing classes to inherit
functionality from other classes and to share common methods and properties.
3. Simplification: Polymorphism simplifies code by enabling the use of generic code
that can handle different types of objects.
Polymorphism allows for more flexible and adaptable code. By enabling objects of different
classes to be treated as if they are of the same class, polymorphism promotes code reuse,
simplification, and flexibility, making it an essential component of Object-Oriented
Programming.
Now that we explained the foundational OOP concepts in Java, let’s look at a few common
examples.
In the example below, encapsulation is demonstrated as an OOP concept in Java. Here, the
variable “name” is kept private or “encapsulated.”
//save as Student.java
package com.javatpoint;
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name
}
}
//save as Test.java
package com.javatpoint;
class Test {
public static void main(String[] args) {
Student s = new Student();
s.setName(“vijay”);
System.out.println(s.getName());
}
}
Compile By: javac -d . Test.java
Run By: java com.javatpoint.Test
Output: vijay
It’s quite simple to achieve inheritance as an OOP concept in Java. Inheritance can be as easy
as using the extends keyword:
class Mammal {
}
class Aardvark extends Mammal {
For a full tutorial on the different ways to use inheritance in java, see this blog post.
In the example below of polymorphism as an OOP concept in Java, we have two classes:
Person and Employee. The Employee class inherits from the Person class by using the
keyword extends. Here, the child class overrides the parent class. For the full example, see
this blog post.
class Person {
void walk() {
System.out.println(“Can Run….”);
}
}
class Employee extends Person {
void walk() {
System.out.println(“Running Fast…”);
}
public static void main(String arg[]) {
Person p = new Employee(); //upcasting
p.walk();
}
}
Procedural Programming
Functional Programming
Functional Programming is a programming style that focuses on the use of functions that
produce output based on their input, without modifying any external state. It is based on
mathematical functions and is characterized by immutability and statelessness. In contrast,
OOP is based on objects and their states, and it is designed to manage complex, stateful
systems.
Here are some key differences between OOP and other programming styles:
1. Data and behavior: OOP is based on the idea of encapsulating data and behavior
within objects, whereas procedural programming separates data and behavior into
different functions or procedures. Functional programming, on the other hand, treats
data and behavior as separate entities altogether.
2. Inheritance and code reuse: OOP uses inheritance to reuse code and build complex
systems. Procedural programming and functional programming do not have
inheritance concepts built into them.
3. Flexibility: OOP is more flexible than procedural programming because it allows for
changes to be made to the underlying data structures and objects without changing the
entire system. In contrast, procedural programming requires a complete restructuring
of the program if any changes are made.
The goal of OOP concepts in Java is to save time without sacrificing security and ease of use.
The following best practices are all oriented toward advancing that main goal.
DRY (Don’t Repeat Yourself). A core concept in Java, DRY simply means you
should never have two blocks of identical code in two different places. Instead, have
one method you use for different applications.
If you expect your Java code to change in the future, encapsulate it by making all
variables and methods private at the outset. As the code changes, increase access to
“protected” as needed, but not too public.
Single Responsibility. This best practice principle for OOP concepts in Java states
that a class should always have only one functionality. That way, the class can be
called and/or extended on its own when new uses arise for it, without causing
coupling between different functionalities.
Open Closed Design. Make all methods and classes Closed for modification but
Open for an extension. That way, tried and tested code can remain static but can be
modified to perform new tasks as needed.
Two basic building blocks of object-oriented programming are classes and objects.
Classes
A class is a template for creating objects. It defines the data and behavior that all objects of
that type will share. In object-oriented programming, you create classes by defining a set of
properties and methods. Properties are like instance variables, except all objects of a class
share them. Methods are like functions, except objects can invoke them.
Classes can be used to model the real world. For example, you could create a class named
Car that defines the properties and methods for all cars. This class includes properties such as
make, model, and year and other methods such as start, stop and accelerate.
Classes can also be used to model abstract concepts. For example, you could create a class
named Shape that defines the properties and methods for all shapes. This class could include
properties such as width, height, and color and other methods such as rotate and translate.
Objects
software-development-services
Four principles of OOP that you should know before learning any object-oriented
programming language include:
Abstraction
It is a set of rules and definitions that allows one to understand a topic or issue without
actually knowing about it in person or how it was developed.
Encapsulation
The process of combining data and behavior together into a single unit is called an object.
The data and behavior should be made hidden from the other objects and the developer. The
object can then be assigned to a variable that can be passed around as if it is an element of
code. Encapsulation allows the definition and implementation of interfaces between different
objects.
Inheritance
Allows one class, called the base or superclass, to be inherited by another class, called the
derived or child class. The child class then gains all the members of the superclass, including
data and behavior, unless they are overridden in the class. This allows for code reuse and a
more concise way of developing software.
Polymorphism
Before we go over the six OOP languages, let’s take a look at what an object-oriented
programming language is.
DEFINITION OF TERMS
1. Simple
Java is a simple programming language and easy to understand because it does not contain
complexities that exist in prior programming languages. In fact, simplicity was the design
aim of Javasoft people, because it has to work on electronic devices where less
memory/resources are available. Java contains the same syntax as C, and C++, so the
programmers who are switching to Java will not face any problems in terms of syntax.
Secondly, the concept of pointers has been completely removed from Java which leads to
confusion for a programmer and pointers are also vulnerable to security.
2. Object-Oriented
Java is an Object Oriented Programming Language, which means in Java everything is
written in terms of classes and objects. Now, what is an Object? The object is nothing but a
real-world entity that can represent any person, place, or thing and can be distinguished from
others. Every object near us has some state and behaviour associated with it.
For example, my mobile phone is a real-world entity and has states like colour, model, brand,
camera quality, etc, and these properties are represented by variables. Also mobile is
associated with actions like, calling, messaging, photography, etc and these actions are
represented by methods in Java.
Now, we saw what an object is and also learned about the state and behaviour associated with
the object.
What is Class? A collection of objects that exhibits the same state and behavior will come
under the same group called class. For example, Samsung, Apple, Vivo, Oppo, Xiaomi, etc
are different brands making various models of smartphones, but they all come under the same
group known as Mobile Phones.
The main concepts of any Object Oriented Programming language are given below:
3. Platform Independent
The design objective of javasoft people is to develop a language that must work on any
platform. Here platform means a type of operating system and hardware technology. Java
allows programmers to write their program on any machine with any configuration and to
execute it on any other machine having different configurations.
In Java, Java source code is compiled to bytecode and this bytecode is not bound to any
platform. In fact, this bytecode is only understandable by the Java Virtual Machine which is
installed in our system. What I meant to say is that every operating system has its own
version of JVM, which is capable of reading and converting bytecode to an equivalent
machine’s native language. This reduces the overhead of programmers writing system-
specific code. Now programmers write programs only once, compile them, generate the
bytecode and then export it anywhere.
4. Portable
The WORA (Write Once Run Anywhere) concept and platform-independent feature make
Java portable. Now using the Java programming language, developers can yield the same
result on any machine, by writing code only once. The reason behind this is JVM and
bytecode. Suppose you wrote any code in Java, then that code is first converted to equivalent
bytecode which is only readable by JVM. We have different versions of JVM for different
platforms. Windows machines have their own version of JVM, Linux has its own and macOS
has its own version of JVM. So if you distribute your bytecode to any machine, the JVM of
that machine would translate the bytecode into the respective machine code. In this way
portability lets the programmers focus on development and productivity rather than writing
different code for different platforms.
5. Robust
The Java Programming language is robust, which means it is capable of handling unexpected
termination of a program. There are 2 reasons behind this, first, it has a most important and
helpful feature called Exception Handling. If an exception occurs in java code then no harm
will happen whereas, in other low-level languages, the program will crash.
Another reason why Java is strong lies in its memory management features. Unlike other
low-level languages, Java provides a runtime Garbage collector offered by JVM, which
collects all the unused variables. The garbage collector is a special program under JVM that
runs from time to time and detects any unused variables and objects and removes them from
the memory to free up space. But in the case of other prior languages, there is no such
program to handle memory management, programmers are solely responsible for allocating
and deallocating memory spaces, otherwise, the program may crash due to insufficient
memory
6. Secure
In today’s era, security is a major concern of every application. As of now, every device is
connected to each other using the internet and this opens up the possibility of hacking. And
our application built using java also needs some sort of security. So Java also provides
security features to the programmers. Security problems like virus threats, tampering,
eavesdropping, and impersonation can be handled or minimized using Java. Encryption and
Decryption feature to secure your data from eavesdropping and tampering over the internet.
An Impersonation is an act of pretending to be another person on the internet. The solution to
The impersonation problem is a digital signature, a file that contains personal identification
information in an unreadable format. Digital Signature can be generated using Java. Virus is a
program that is capable of harming our system and this is generally spread with .exe files,
image files, and video files but cannot be spread using a text file the good thing is java
bytecode is also a text file (yes .class file also a text file with non-human-readable format).
Even if somebody tries to add virus code in a bytecode file, then also we are safe, because our
JVM is smart enough to distinguish viruses from normal programs. If a virus is found in a
bytecode file, JVM will throw an exception and abort execution.
7. Interpreted
In programming languages, you have learned that they use either the compiler or an
interpreter, but Java programming language uses both a compiler and an interpreter. Java
programs are compiled to generate bytecode files then JVM interprets the bytecode file
during execution. Along with this JVM also uses a JIT compiler (it increases the speed of
execution).
8. Multi-Threaded
Thread is a lightweight and independent subprocess of a running program (i.e, process) that
shares resources. And when multiple threads run simultaneously is called multithreading. In
many applications, you have seen multiple tasks running simultaneously, for example,
Google Docs where while typing text, the spell check and autocorrect tasks are running.
The server also uses multithreading to provide its services to multiple client requests. In Java,
you can create threads in two ways, either by implementing the Runnable interface or by
extending the Thread class.
Conclusion
In this article, we have discussed the design aim of Java i.e, James Gosling wants to develop
Java as a system-independent language that must work on the WORA (Write Once Run
Anywhere) principle. We also have learned the top features of Java, which makes java the
most popular among other programming languages. By now, you must have got a glimpse of
Java. Along with all this, we also discussed problems in C++, which have been resolved in
Java.
Keyword Description
A non-access modifier. Used for classes and methods: An abstract class cannot
be used to create objects (to access it, it must be inherited from another class).
abstract
An abstract method can only be used in an abstract class, and it does not have a
body. The body is provided by the subclass (inherited from)
boolean A data type that can only store true and false values
byte A data type that can store whole numbers from -128 and 127
double A data type that can store whole numbers from 1.7e−308 to 1.7e+308
extends Extends a class (indicates that a class is inherited from another class)
A non-access modifier used for classes, attributes and methods, which makes
final
them non-changeable (impossible to inherit or override)
Used with exceptions, a block of code that will be executed no matter if there is
finally
an exception or not
float A data type that can store whole numbers from 3.4e−038 to 3.4e+038
int A data type that can store whole numbers from -2147483648 to 2147483647
interface Used to declare a special type of class that only contains abstract methods
Specifies that a method is not implemented in the same Java source file (but in
native
another language)
private An access modifier used for attributes, methods and constructors, making them
only accessible within the declared class
An access modifier used for attributes, methods and constructors, making them
protected
accessible in the same package and subclasses
Finished the execution of a method, and can be used to return a value from a
return
method
short A data type that can store whole numbers from -32768 to 32767
Indicates that an attribute is not cached thread-locally, and is always read from
volatile
the "main memory"
Java Keywords which are used to declare variables of different data types.
1. byte : byte is a keyword used to store numbers ranging from -128 to 127.
byte num=13;
2. short : short keyword is used to store numbers ranging from -32768 to 32767.
3. int : int keyword is used to store numbers ranging from -2147483648 to 2147483647.
5. char : char keyword is used to store single character/letters or ASCII values. Its value
range is from ‘\u0000’ to ‘\uffff’ or 0 to 65535. All the characters must be enclosed within
single quotes.
char var='A';
char name='\u0041';
boolean var=true;
7. float : float keyword is used to store fractional values ranging from -3.4028235E38F to
3.4028235E38F. A letter ‘f’ or ‘F’ should be added to tell the compiler that the fraction is a
float and not a double.
float var=-3.40282E38F;
Java Keywords which are used for loops and Iterative statements.
9. for : for keyword is used to start the for loop. It is an entry-controlled loop in which the
condition is checked first, and then the loop body gets executed only if the condition is
satisfied. If the number of iterations is known already, then it is recommended to use for loop.
for(int i=0;i<=5;i++){
System.out.println(i);
10. while : while keyword is used to start the while loop. It is also an entry-controlled loop.
If the number of iterations is not known already, then it is recommended to use while loop.
int i=0;
while(i<=5){
System.out.println(i);
i++;
11. do : do keyword is used to start a do-while loop. It is used along with the while to create
a do-while loop. do-while loop is an exit-controlled loop in which, first of all the loop body
gets executed and then the condition is checked while exiting from the loop body.
int i=0;
do{
System.out.println(i);
i++;
}while(i<=5);
12. if : if keyword is used to create the if conditional statement. if the condition is true, then the if
block gets executed.
int i=0;
if(i==0){
System.out.println("Correct");
13. else : else keyword is used when the if condition becomes false, and then the else block
gets executed. It indicated the alternative branches in an if statement.
int i=1;
if(i==0){
System.out.println("Correct");
else{
System.out.println("Wrong");
14. switch : switch keyword is used to create the switch statement, which is used to execute
different cases based on test value.
switch (number){
case 1:
default:
15. case : case keyword is used inside the switch-case block to create each case.
switch (number){
case 1:
break;
case 2:
break;
16. default : default keyword is used inside the switch-case block. If non of the cases
matches, then the default block gets executed.
switch (number){
case 1:
break;
default:
17. continue : continue keyword is used to skip the statement following it inside the loop
body and moves the control to the end of the loop body, and the control is automatically
passed to the next iteration, and then the same loop body gets executed from the next round in
usual manner.
for(int i=0;i<=5;i++){
if(i==3)
continue;
System.out.println(i);
18. break : break keyword is used to break out of a loop body or the switch block. The break
statement is used for early exiting from the loop or switch statement at specified conditions.
for(int i=0;i<=5;i++){
if(i==3)
break;
System.out.println(i);
#4 Function Keywords
20. void : void keyword is used to specify a method which does not return any value.
void main()
21. return : return keyword in Java is used to return back the control along with the value
from the called method(function) to the calling place.
return a+b;
#5 Object Keywords
23. this : this keyword in Java is used to refer to the current object inside a method or
constructor. It is also used to distinguish between the instance variable and local variable.
int a=50;
MyClass(int a){
this.a=a;
24. super : this keyword in Java is used to refer to the objects of the super class. It is used
when we want to call the super class variable, method and constructor through sub-class
object.
public class A {
int a =30;
class B extends A{
int a=40;
System.out.println(a);
System.out.println(super.a);
25. instanceof : instanceof keyword is used to check if the given object is an instantiated
object of the specified class or not. It returns the boolean value.
Test obj=new Test();
System.out.println("Yes");
else{
System.out.println("No");
Java Keywords which are related to specify the accessibility or scope of a field, method,
constructor or class.
26. public : public keyword in Java is used for classes, methods, variables and constructors,
which makes them accessible from anywhere.
27. private : private keyword in Java is used to specify that a method, constructor or
variable will be accessible only within the declared class.
28. protected : private keyword in Java is used to specify that a method, constructor or
variable will be accessible within the package and outside the package through inheritance
only.
Java keywords which do not have anything related to the level of access but they provide a
special functionality when specified.
29. final : final keyword in Java is used with variables, methods and classes. A final variable
is a constant value which cannot be changed. By making a method final, we cannot override
it. By making a class final, we cannot extend it.
30. static : static keyword in Java is used with variables, methods, blocks and classes. The
static variables and methods get associated with the class as a whole rather than belonging to
the individual object. The static keyword is used with variables and methods to make them
constant for every instance of the class.
31. abstract : abstract keyword in Java is used to create abstract classes and abstract
methods. The abstract methods do not have the body of themselves and must be overridden in
all child classes. The class which contains an abstract method must be declared as an abstract
class using the abstract keyword, and we can not instantiate that class.
34. volatile : volatile keyword in Java is used to indicate the visibility of variables modified
by multiple threads during concurrent programming i.e every read or write of the volatile
variable will be to the main memory and not the CPU cache.
35. strictfp : strictfp keyword in Java is used to make floating-point calculations platform
independent.
36. native : native keyword in Java is used to create a method native which indicates that the
method’s implementation is also written in different languages like C and C++ in native code
using JNI(Java Native Interface).
#8 Declarative Keywords
37. package : package keyword in Java is used to declare a Java package which includes
classes, sub-packages, and interfaces.
package mypackage;
38. import : import keyword in Java is used to make classes and interfaces inside a package
accessible to the current source code.
import javax.swing.JFrame;
39. class : class keyword in Java is used to declare a new class in Java.
class Test{}
40. interface : interface keyword in Java is used to declare an interface that only contains the
abstract methods.
interface myInterface{
System.out.println("Hello");
41. enum : enum keyword in Java is used to declare the enumerated(unchangeable) type,
which are fixed set of constants. The constructors of enum are always private or default.
class Test{
enum WeekDays{
SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;
}
System.out.println(WeekDays.MONDAY);
#9 Inheritance Keywords
interface myInterface{
System.out.println("Hello");
44. extends : extends keyword in Java is used to inherit a new class from the base class
using inheritance.
class Base{
}
}
Java Keyword which are related with exception handling in Java programming
45. throw : throw keyword in Java is used to throw an exception explicitly from a method or
block of code. It is usually used with custom-made exceptions.
class Test{
int a=47;
int b=5;
void divide(){
if(b==5){
test.divide();
}
46. throws : throws keyword in Java is used to declare exceptions that can be thrown from a
method during the program execution.
int a=12;
int b=0;
System.out.println(a/b);
47. try : try keyword in Java is used to create the try block, which is tested for any kind of
exceptions while it is being executed. A try block must be followed by either catch or finally
block.
try
int a=15;
int b=0;
System.out.println(a/b);
catch (ArithmeticException e)
48. catch : catch keyword in Java is used to create the catch block. When any exception
occurs in the try block, it is caught by the catch block and is only used after the try block.
try
int a=15;
int b=0;
System.out.println(a/b);
}
catch (ArithmeticException e)
49. finally : finally keyword in Java is used to create the finally block, which is used after
the try-catch block, and the finally block always gets executed whether an exception is found
or not.
finally
1. Primitive data types: The primitive data types include boolean, char, byte, short, int, long,
float and double.
2. Non-primitive data types: The non-primitive data types include Classes, Interfaces, and
Arrays.
Duration 0:00
byte 0 1 byte
short 0 2 byte
int 0 4 byte
long 0L 8 byte
The Boolean data type specifies one bit of information, but its "size" can't be defined
precisely.
Example:
1. Boolean one = false
The byte data type is used to save memory in large arrays where the memory savings is most
required. It saves space because a byte is 4 times smaller than an integer. It can also be used
in place of "int" data type.
Example:
The short data type can also be used to save memory just like byte data type. A short data
type is 2 times smaller than an integer.
Example:
The int data type is generally used as a default data type for integral values unless if there is
no problem about memory.
Example:
Example:
Example:
1. float f1 = 234.5f
Example:
1. double d1 = 12.3
Example:
It is because java uses Unicode system not ASCII code system. The \u0000 is the lowest
range of Unicode system. To get detail explanation about Unicode visit next page.