pl lecture8

55
L o g o Програмчлалын хэл Олон Улсын Улаанбаатар Их Сургууль 2015 он Класс, функцын тухай багш Б.Ганзориг

Upload: ganzorigb

Post on 06-Aug-2015

27 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Pl lecture8

L o g o

Програмчлалын хэл

Олон Улсын Улаанбаатар Их Сургууль 2015 он

Класс, функцын тухайбагш Б.Ганзориг

Page 2: Pl lecture8

L o g o

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Агуулга

Устгагч функцын тухай3

Устгагч функцын хэрэглээ4

1

2

Статик хувьсагч5

Статик хувьсагчийн хэрэглээ6

Класс дахь функцын тухай

Класс дахь функцын хэрэглээ

Page 3: Pl lecture8

L o g o

Классын функцүүд

Классын функцүүд нь public, private, protected гэсэн тодорхойлогчтой байдаг.

Хандах байдал нь адил.Хувьсагч болон функцүүдэд ингэж хандах

эрхийг тавьж өгснөөр програм өндөр зохион байгуулалттай болдог.

• Protected void add()

(Тайлбар: хэн дуртай нь хаанаас ч хамаагүй хандаад байвал програм алдаатай болох боломж ихэсдэг)

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 4: Pl lecture8

L o g o

Жишээ

Time1 ба TimeTest1 классуудыг хийнэ.Public классууд нь тусдаа файлд байх

ёстой.Time1 класс нь өөрөө бие даан

ажиллахгүй.• Main функцгүй

TimeTest1 класс нь (main функцтэй) Time1 классын обьектийг үүсгэн ашиглана.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 5: Pl lecture8

L o g o

Жишээ

import java.text.DecimalFormat;

public class Time1 extends Object {

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

public Time1()

{

setTime( 0, 0, 0 );

}

public void setTime( int h, int m, int s )

{

hour = ( ( h >= 0 && h < 24 ) ? h : 0 );

minute = ( ( m >= 0 && m < 60 ) ? m : 0 );

second = ( ( s >= 0 && s < 60 ) ? s : 0 );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Time1 класс нь Object классаас удамшиж байна.

Private хувьсагчиддад зөвхөн уг классын функцүүд л хандаж өөрчлөх, утгыг нь харах эрхтэй байдаг

Time1 байгуулагч нь Time1 классын обьектийг үүсгээд setTime функцийг дуудна.

setTime функц нь классын private хувьсагчдад аргументаар орж ирсэн утгуудыг олгоно.

Page 6: Pl lecture8

L o g o

Жишээ

public String toUniversalString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( hour ) + ":" +

twoDigits.format( minute ) + ":" + twoDigits.format( second );

}

public String toStandardString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" +

twoDigits.format( minute ) + ":" + twoDigits.format( second ) +

( hour < 12 ? " AM" : " PM" );

}

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Эдгээр функцүүд нь цаг, минут, секундийг янз янзын форматаар үзүүлнэ.

Page 7: Pl lecture8

L o g o

Жишээ

import javax.swing.JOptionPane;

public class TimeTest1 {

public static void main( String args[] )

{

Time1 time = new Time1(); // calls Time1 constructor

String output = "The initial universal time is: " +

time.toUniversalString() + "\nThe initial standard time is: " +

time.toStandardString();

time.setTime( 13, 27, 6 );

output += "\n\nUniversal time after setTime is: " +

time.toUniversalString() +

"\nStandard time after setTime is: " + time.toStandardString();

time.setTime( 99, 99, 99 );

output += "\n\nAfter attempting invalid settings: " +

"\nUniversal time: " + time.toUniversalString() +

"\nStandard time: " + time.toStandardString();

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Time1 классын time обьектийг үүсгэж байна. =new Time1 мөр нь Time1 классын байгуулагчийг дуудаж байна.

TimeTest1 классаас Time1 классын public функцүүдийг ашиглаж байна.

Page 8: Pl lecture8

L o g o

Жишээ

JOptionPane.showMessageDialog( null, output,

"Testing Class Time1", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

} // end main

} // end class TimeTest1

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 9: Pl lecture8

L o g o

Жишээ

public class TimeTest2 {

public static void main( String args[] )

{

Time1 time = new Time1();

time.hour = 7; // error: hour is a private instance variable

time.minute = 15; // error: minute is a private instance variable

time.second = 30; // error: second is a private instance variable

}

} // end class TimeTest2

Классын private хувьсагчдад шууд хандах боломжгүй.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 10: Pl lecture8

L o g o

This

This нь тухайн обьектийг өөрийг нь хэлдэг. Хэрвээ класст өөрт нь байгаа хувьсагч нь өөр

классаас удамшиж авсан хувьсагчтай ижил нэртэй байгаа бол this ашиглан миний хувьсагч гэж ялгаж өгөх байдлаар хэрэглэнэ.

Мөн функцийн аргумент ба классын хувьсагчийг ялгахад хэрэглэж болно.

public class Test{String id;int counter;public void init(){

id = “object”; \\ this.id = “object”this.counter = 0; \\ counter = 0;

}}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 11: Pl lecture8

L o g o

Жишээ

import javax.swing.*;

import java.text.DecimalFormat;

public class ThisTest {

public static void main( String args[] )

{

SimpleTime time = new SimpleTime( 12, 30, 19 );

JOptionPane.showMessageDialog( null, time.buildString(),

"Demonstrating the \"this\" Reference",

JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

}

} // end class ThisTest

class SimpleTime {

private int hour;

private int minute;

private int second;

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

SimpleTime класст hour, minute, second хувьсагчдыг зарлаж байна.

Page 12: Pl lecture8

L o g o

Жишээ

public SimpleTime( int hour, int minute, int second )

{

this.hour = hour; // set "this" object's hour

this.minute = minute; // set "this" object's minute

this.second = second; // set "this" object's second

}

public String buildString()

{

return "this.toStandardString(): " + this.toStandardString() +

"\ntoStandardString(): " + toStandardString();

}

public String toStandardString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( this.hour ) + ":" +

twoDigits.format( this.minute ) + ":" +

twoDigits.format( this.second );

}

} // end class SimpleTime

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

toStandartString функцийг хоёр янзаар дуудаж байна. Хоёулаа адилхан юм.

Page 13: Pl lecture8

L o g o

Функц дахин тодорхойлох

Класс дотор ижил нэртэй функцүүд байж болдог.

Ийм функцүүд нь аргументаараа ялгагддаг.

Ийм функцүүдийг дахин тодорхойлогдсон (overloaded) функцүүд гэдэг.

Ижил нэртэй ижил аргументтай функцүүд байж болохгүй.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 14: Pl lecture8

L o g o

Жишээ

import java.text.DecimalFormat;

public class Time2 {

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

// Time2 constructor initializes each instance variable to zero;

// ensures that Time object starts in a consistent state

public Time2()

{

this( 0, 0, 0 ); // invoke Time2 constructor with three arguments

}

// Time2 constructor: hour supplied, minute and second defaulted to 0

public Time2( int h )

{

this( h, 0, 0 ); // invoke Time2 constructor with three arguments

}

// Time2 constructor: hour and minute supplied, second defaulted to 0

public Time2( int h, int m )

{

this( h, m, 0 ); // invoke Time2 constructor with three arguments

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Аргументгүй байгуулагч функц

Нэг int аргументтай дахин тодорхойлогдсон байгуулагч функц

Хоёр int аргументтай дахин тодорхойлогдсон байгуулагч функц

Page 15: Pl lecture8

L o g o

Жишээ

// Time2 constructor: hour, minute and second supplied

public Time2( int h, int m, int s )

{

setTime( h, m, s ); // invoke setTime to validate time

}

// Time2 constructor: another Time2 object supplied

public Time2( Time2 time )

{

// invoke Time2 constructor with three arguments

this( time.hour, time.minute, time.second );

}

// set a new time value using universal time; perform

// validity checks on data; set invalid values to zero

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Дахин тодорхойлогдсон гуравдах байгуулагч функц. Гурван int аргументтай байна.

Time2 классын обьектийг аргументаараа хүлээж авдаг дөрөвдэх байгуулагч.

Page 16: Pl lecture8

L o g o

Жишээ

public void setTime( int h, int m, int s )

{

hour = ( ( h >= 0 && h < 24 ) ? h : 0 );

minute = ( ( m >= 0 && m < 60 ) ? m : 0 );

second = ( ( s >= 0 && s < 60 ) ? s : 0 );

}

// convert to String in universal-time format

public String toUniversalString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( hour ) + ":" +

twoDigits.format( minute ) + ":" + twoDigits.format( second );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 17: Pl lecture8

L o g o

Жишээ

// convert to String in standard-time format

public String toStandardString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" +

twoDigits.format( minute ) + ":" + twoDigits.format( second ) +

( hour < 12 ? " AM" : " PM" );

}

} // end class Time2

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 18: Pl lecture8

L o g o

Жишээ

import javax.swing.*;

public class TimeTest3 {

public static void main( String args[] )

{

Time2 t1 = new Time2(); // 00:00:00

Time2 t2 = new Time2( 2 ); // 02:00:00

Time2 t3 = new Time2( 21, 34 ); // 21:34:00

Time2 t4 = new Time2( 12, 25, 42 ); // 12:25:42

Time2 t5 = new Time2( 27, 74, 99 ); // 00:00:00

Time2 t6 = new Time2( t4 ); // 12:25:42

String output = "Constructed with: " + "\nt1: all arguments defaulted" +

"\n " + t1.toUniversalString() + "\n " + t1.toStandardString();

output += "\nt2: hour specified; minute and second defaulted" +

"\n " + t2.toUniversalString() + "\n " + t2.toStandardString();

output += "\nt3: hour and minute specified; second defaulted" +

"\n " + t3.toUniversalString() + "\n " + t3.toStandardString();

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Өөр өөр байгуулагч ашиглан Time2 классын обьектийг үүсгэж байна.

Page 19: Pl lecture8

L o g o

Жишээ

output += "\nt4: hour, minute and second specified" +

"\n " + t4.toUniversalString() + "\n " + t4.toStandardString();

output += "\nt5: all invalid values specified" +

"\n " + t5.toUniversalString() + "\n " + t5.toStandardString();

output += "\nt6: Time2 object t4 specified" +

"\n " + t6.toUniversalString() + "\n " + t6.toStandardString();

JOptionPane.showMessageDialog( null, output,

"Overloaded Constructors", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

} // end main

} // end class TimeTest3

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 20: Pl lecture8

L o g o

Үр дүн

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 21: Pl lecture8

L o g o

Get, set функцүүд

Хандалтын функцүүд (“get” функц) Public функцүүд байдаг. Private хувьсагчийн утгыг авах

боломжийг олгодог.Өөрчлөгч функцүүд (“set” функц)

Public функцүүд байдаг. Private хувьсагчийн утгыг өөрчлөх

боломжийг олгодог.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 22: Pl lecture8

L o g o

Жишээ

import java.text.DecimalFormat;

public class Time3 {

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

// Time3 constructor initializes each instance variable to zero;

// ensures that Time object starts in a consistent state

public Time3()

{

this( 0, 0, 0 ); // invoke Time3 constructor with three arguments

}

// Time3 constructor: hour supplied, minute and second defaulted to 0

public Time3( int h )

{

this( h, 0, 0 ); // invoke Time3 constructor with three arguments

}

// Time3 constructor: hour and minute supplied, second defaulted to 0

public Time3( int h, int m )

{

this( h, m, 0 ); // invoke Time3 constructor with three arguments

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Эдгээр private хувьсагчдад бусад классын обьектуудаас шууд хандах боломжгүй.

Page 23: Pl lecture8

L o g o

Жишээ // Time3 constructor: hour, minute and second supplied

public Time3( int h, int m, int s )

{ setTime( h, m, s ); }

// Time3 constructor: another Time3 object supplied

public Time3( Time3 time )

{ // invoke Time3 constructor with three arguments

this( time.getHour(), time.getMinute(), time.getSecond() );

}

// Set Methods

// set a new time value using universal time; perform

// validity checks on data; set invalid values to zero

public void setTime( int h, int m, int s )

{

setHour( h ); // set the hour

setMinute( m ); // set the minute

setSecond( s ); // set the second

} // validate and set hour

public void setHour( int h )

{

hour = ( ( h >= 0 && h < 24 ) ? h : 0 );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Set функцүүдийн ачаар private өгөгдлийг өөрчлөх боломжтой болно.

Page 24: Pl lecture8

L o g o

Жишээ // validate and set minute

public void setMinute( int m )

{

minute = ( ( m >= 0 && m < 60 ) ? m : 0 );

} // validate and set second

public void setSecond( int s )

{

second = ( ( s >= 0 && s < 60 ) ? s : 0 );

} // Get Methods

// get hour value

public int getHour()

{

return hour;

} // get minute value

public int getMinute()

{

return minute;

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Get функцүүдийг ашиглан private хувьсагчийн утгыг харах боломжтой болно.

Page 25: Pl lecture8

L o g o

Жишээ // get second value

public int getSecond()

{

return second;

}

// convert to String in universal-time format

public String toUniversalString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( getHour() ) + ":" +

twoDigits.format( getMinute() ) + ":" +

twoDigits.format( getSecond() );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 26: Pl lecture8

L o g o

Жишээ

// convert to String in standard-time format

public String toStandardString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return ( ( getHour() == 12 || getHour() == 0 ) ?

12 : getHour() % 12 ) + ":" + twoDigits.format( getMinute() ) +

":" + twoDigits.format( getSecond() ) +

( getHour() < 12 ? " AM" : " PM" );

}

} // end class Time3

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 27: Pl lecture8

L o g o

Жишээimport java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class TimeTest4 extends JApplet implements ActionListener {

private Time3 time;

private JLabel hourLabel, minuteLabel, secondLabel;

private JTextIField hourField, minuteField, secondField, displayField;

private JButton tickButton;

// create Time3 object and set up GUI

public void init()

{

time = new Time3(); // create Time3 object

// get applet's content pane and change its layout to FlowLayout

Container container = getContentPane();

container.setLayout( new FlowLayout() );

// set up hourLabel and hourField

hourLabel = new JLabel( "Set Hour" );

hourField = new JTextField( 10 );

container.add( hourLabel );

container.add( hourField );

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Time3 обьектийг зарлаж үүсгэж байна.

JTextFields нь хэрэглэгчид цагийг өөрчлөх боломж олгоно.

Page 28: Pl lecture8

L o g o

Жишээ // set up minuteLabel and minuteField

minuteLabel = new JLabel( "Set Minute" );

minuteField = new JTextField( 10 );

container.add( minuteLabel );

container.add( minuteField );

// set up secondLabel and secondField

secondLabel = new JLabel( "Set Second" );

secondField = new JTextField( 10 );

container.add( secondLabel );

container.add( secondField );

// set up displayField

displayField = new JTextField( 30 );

displayField.setEditable( false );

container.add( displayField );

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Минутын утгыг өөрчлөхдөө JTextFields ашиглая.

Секундын утгыг өөрчлөхдөө JTextFields ашиглая.

Page 29: Pl lecture8

L o g o

Жишээ // set up tickButton

tickButton = new JButton( "Add 1 to Second" );

container.add( tickButton );

// register event handlers; this applet is the ActionListener,

// which contains method actionPerformed that will be called to

// handle action events generated by hourField, minuteField,

// secondField and tickButton

hourField.addActionListener( this );

minuteField.addActionListener( this );

secondField.addActionListener( this );

tickButton.addActionListener( this );

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 30: Pl lecture8

L o g o

Жишээ displayTime(); // update text in displayField and status bar

} // end method init

// event handler for button and textfield events

public void actionPerformed( ActionEvent event )

{

// process tickButton event

if ( event.getSource() == tickButton )

tick();

// process hourField event

else if ( event.getSource() == hourField ) {

time.setHour( Integer.parseInt( event.getActionCommand() ) );

hourField.setText( "" );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 31: Pl lecture8

L o g o

Жишээ// process minuteField event

else if ( event.getSource() == minuteField ) {

time.setMinute( Integer.parseInt( event.getActionCommand() ) );

minuteField.setText( "" );

}

// process secondField event

else if ( event.getSource() == secondField ) {

time.setSecond( Integer.parseInt( event.getActionCommand() ) );

secondField.setText( "" );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

TimeTest5 нь Time3-ийн private хувьсагчдийг өөрчлөхдөө Time3-н set функцүүдийг ашиглаж байна.

Page 32: Pl lecture8

L o g o

Жишээ// process minuteField event

else if ( event.getSource() == minuteField ) {

time.setMinute( Integer.parseInt( event.getActionCommand() ) );

minuteField.setText( "" );

}

// process secondField event

else if ( event.getSource() == secondField ) {

time.setSecond( Integer.parseInt( event.getActionCommand() ) );

secondField.setText( "" );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

TimeTest5 нь Time3-ийн private хувьсагчдийг өөрчлөхдөө Time3-н set функцүүдийг ашиглаж байна.

Page 33: Pl lecture8

L o g o

Жишээ displayTime(); // update text in displayField and status bar

} // end method actionPerformed

// update displayField and applet container's status bar

public void displayTime()

{

displayField.setText( "Hour: " + time.getHour() + "; Minute: " +

time.getMinute() + "; Second: " + time.getSecond() );

showStatus( "Standard time is: " + time.toStandardString() +

"; Universal time is: " + time.toUniversalString() );

} // end method updateDisplay

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 34: Pl lecture8

L o g o

Жишээ // add one to second and update hour/minute if necessary

public void tick()

{

time.setSecond( ( time.getSecond() + 1 ) % 60 );

if ( time.getSecond() == 0 ) {

time.setMinute( ( time.getMinute() + 1 ) % 60 );

if ( time.getMinute() == 0 )

time.setHour( ( time.getHour() + 1 ) % 24 );

}

} // end method tick

} // end class TimeTest4

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

TimeTest5 нь Time3-ийн private хувьсагчдийг авахдаа Time3-н get функцүүдийг ашиглаж байна.

Page 35: Pl lecture8

L o g o

Үр дүн

Жава програмчлал Улаанбаатар Их Сургууль 2013 он

Page 36: Pl lecture8

L o g o

Үр дүн

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 37: Pl lecture8

L o g o

Үр дүн

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 38: Pl lecture8

L o g o

Агуулалт Composition

Нэг класс өөр классын обьектийг зарлалтандаа ашиглаж болно. Энэхүү обьект нь уг классын хувьсагчтай

адилхан болдог.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 39: Pl lecture8

L o g o

Жишээ

public class Date {

private int month; // 1-12

private int day; // 1-31 based on month

private int year; // any year

public Date( int theMonth, int theDay, int theYear )

{

month = checkMonth( theMonth ); // validate month

year = theYear; // could validate year

day = checkDay( theDay ); // validate day

System.out.println( "Date object constructor for date " + toDateString() );

} // end Date constructor

// utility method to confirm proper month value

private int checkMonth( int testMonth )

{ if ( testMonth > 0 && testMonth <= 12 ) // validate month

return testMonth;

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 40: Pl lecture8

L o g o

Жишээ

else { // month is invalid

System.out.println( "Invalid month (" + testMonth +

") set to 1." );

return 1; // maintain object in consistent state

}

} // end method checkMonth

// utility method to confirm proper day value based on month and year

private int checkDay( int testDay )

{ int daysPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

// check if day in range for month

if ( testDay > 0 && testDay <= daysPerMonth[ month ] )

return testDay;

Програмчлалын хэл Улаанбаатар Дээд Сургууль 2011 он

Page 41: Pl lecture8

L o g o

Жишээ

// check for leap year

if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||

( year % 4 == 0 && year % 100 != 0 ) ) )

return testDay;

System.out.println( "Invalid day (" + testDay + ") set to 1." );

return 1; // maintain object in consistent state

} // end method checkDay

// return a String of the form month/day/year

public String toDateString()

{

return month + "/" + day + "/" + year;

}

} // end class Date

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 42: Pl lecture8

L o g o

Жишээpublic class Employee {

private String firstName;

private String lastName;

private Date birthDate;

private Date hireDate;

public Employee( String first, String last, Date dateOfBirth,

Date dateOfHire )

{

firstName = first;

lastName = last;

birthDate = dateOfBirth;

hireDate = dateOfHire;

}

public String toEmployeeString()

{

return lastName + ", " + firstName +

" Hired: " + hireDate.toDateString() +

" Birthday: " + birthDate.toDateString();

}

} // end class Employee

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 43: Pl lecture8

L o g o

Жишээ import javax.swing.JOptionPane;

public class EmployeeTest {

public static void main( String args[] )

{

Date birth = new Date( 7, 24, 1949 );

Date hire = new Date( 3, 12, 1988 );

Employee employee = new Employee( "Bob", "Jones", birth, hire );

JOptionPane.showMessageDialog( null, employee.toEmployeeString(),

"Testing Class Employee", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

}

} // end class EmployeeTest

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Date object constructor for date 7/24/1949Date object constructor for date 3/12/1988

Page 44: Pl lecture8

L o g o

Устгагч функц Finalizer

Java нь үйл ажиллагаагаа дуусгасан обьектуудыг автоматаар олж санах ойгоос чөлөөлдөг.• Garbage collection (хог цуглуулалт)

Обьект санах ойгоос чөлөөлөгдөхөд түүний Finalize функц нь дуудагддаг.• Санах ойг системд буцааж өгнө.• java.lang.Object класс дотор байх finalize

функцийг ашигладаг.• Аргументгүй• void функц

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 45: Pl lecture8

L o g o

Статик хувьсагч

Static түлхүүр үгийг ашиглана. Классын бүх обьектуудад ижил

хэрэглэгддэг өгөгдлийг статик болгож ашигладаг.

Классын бүх обьектууд уг өгөгдлийг хуваан эзэмшинэ.

Хандахдаа КлассНэр.хувьсагчНэр• Math.pi

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 46: Pl lecture8

L o g o

Жишээ

public class Employee {

private String firstName;

private String lastName;

private static int count = 0; // number of objects in memory

// initialize employee, add 1 to static count and

// output String indicating that constructor was called

public Employee( String first, String last )

{

firstName = first;

lastName = last;

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Employee классын обьектууд дундаа нэг count гэсэн хувьсагчтай.

Page 47: Pl lecture8

L o g o

Жишээ

++count; // increment static count of employees

System.out.println( "Employee constructor: " +

firstName + " " + lastName );

}

// subtract 1 from static count when garbage collector

// calls finalize to clean up object and output String

// indicating that finalize was called

protected void finalize()

{

--count; // decrement static count of employees

System.out.println( "Employee finalizer: " +

firstName + " " + lastName + "; count = " + count );

}

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 48: Pl lecture8

L o g o

Жишээ // get first name

public String getFirstName()

{

return firstName;

}

// get last name

public String getLastName()

{

return lastName;

}

// static method to get static count value

public static int getCount()

{

return count;

}

} // end class Employee

Програмчлалын хэл

Статик хувьсагчид статик функц ашиглан хандаж байна.

Улаанбаатар Их Сургууль 2013 он

Page 49: Pl lecture8

L o g o

Жишээimport javax.swing.*;

public class EmployeeTest {

public static void main( String args[] )

{ // prove that count is 0 before creating Employees

String output = "Employees before instantiation: " +

Employee.getCount();

// create two Employees; count should be 2

Employee e1 = new Employee( "Susan", "Baker" );

Employee e2 = new Employee( "Bob", "Jones" );

// prove that count is 2 after creating two Employees

output += "\n\nEmployees after instantiation: " + "\nvia e1.getCount(): " + e1.getCount() +

"\nvia e2.getCount(): " + e2.getCount() +"\nvia Employee.getCount(): " + Employee.getCount();

// get names of Employees

output += "\n\nEmployee 1: " + e1.getFirstName() +

" " + e1.getLastName() + "\nEmployee 2: " + e2.getFirstName() + " " + e2.getLastName();

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

EmployeeTest нь Employee-н статик функцийг обьект нь үүсээгүй байхад ч дуудаж чадна.

Page 50: Pl lecture8

L o g o

Жишээ // decrement reference count for each Employee object; in this

// example, there is only one reference to each Employee, so these

// statements mark each Employee object for garbage collection

e1 = null;

e2 = null;

System.gc(); // suggest call to garbage collector

// show Employee count after calling garbage collector; count

// displayed may be 0, 1 or 2 based on whether garbage collector

// executes immediately and number of Employee objects collected

output += "\n\nEmployees after System.gc(): " +

Employee.getCount();

JOptionPane.showMessageDialog( null, output, "Static Members", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

}

} // end class EmployeeTest

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Java-н автомат garbage collection механизмийг дуудаж байна.

Employee constructor: Susan BakerEmployee constructor: Bob JonesEmployee finalizer: Susan Baker; count = 1Employee finalizer: Bob Jones; count = 0

Page 51: Pl lecture8

L o g o

Үр дүн

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 52: Pl lecture8

L o g o

Даалгавар

1. Лекц дээрх бүх жишээг ажиллуулан тайлбарыг нь монголоор (англи үсгээр галиглаж болно) хий.

2. Доорх жишээг хийнэ: Классууд:

• Хүн класс – Нэр– Нас– Хүйс– ..........

• Оюутан класс– Мэргэжил– Анги– ДундажДүн– ...............

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 53: Pl lecture8

L o g o

Даалгавар

Оюутан класс нь Хүн классаас удамшина. Хэрэглэгчээс оюутны тоо болон оюутан бүрийн

мэдээллийг авна. Оюутнуудыг массивт хийнэ. Бүх оюутны мэдээллийг харуулдаг функц. Бүх оюутны дундаж дүнг харуулдаг функц. Нийт хэдэн оюутан байгааг харуулдаг функц. Оюутнуудыг дундаж дүнгээр нь эрэмбэлдэг функц.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 54: Pl lecture8

L o g o

Шинэ үгс

Inheritance: Удамшилpublic: Дурын классын функцээс

хандаж болох хувьсагч болон функц.private: Зөвхөн уг классын

функцүүд л хандаж болох хувьсагч болон функц.

protected: Уг классын болон түүнээс удамшсан бусад классын функцүүдээс хандаж болох хувьсагч болон функц.

Garbage collection: Java нь ашиглагдахгүй болсон обьектуудыг санах ойгоос олж түүний finalize функцийг дуудан уг обьектийг санах ойгоос чөлөөлдөг. Энэ процессийг хог цуглуулалт буюу garbage collection гэдэг.

Програмчлалын хэл Улаанбаатар Их Сургууль 2013 он

Page 55: Pl lecture8

L o g o

Олон Улсын Улаанбаатар Их Сургууль 2015 он

Програмчлалын хэл