Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД JP Инф_каз_2015.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
595.94 Кб
Скачать

7 Дәріс. Мұрагерлік және әдістерді қайта анықтау

Дәріс мақсаты: көп деңгейлі мұрагерлік, суперкласстың объектілі айнымалылары және әдістерді динамикалық басқару, абстрактілі кластармен танысу

Көп деңгейлі мұрагерлік

Объектілі-бағытталған программалаудың екінші негізгі қасиеті - мұрагерлік (бірінші – инкапсуляция). Класстар-ұрпақтар тек қана өз айнымалылары мен әдістерін ғана құрып қоймай, сондай-ақ кластар-бабалар әдістері мен айнымалылардың мұрагері болады. Класс-ұрпақ ішкі кластар деп аталады. Ал берілген кластың бабасын оның суперкласы деп атайды. Кезекті мысалда класты қалай кеңейту керектігі көрсетілген. Point класының айнымалыларына үшінші z айнымалысы қосылады.

class Point3D extends Point { int z;

Point3D(int x, int y, int z) {

this.x = x;

this.у = у;

this.z = z;

}

Point3D() {

this(-1,-1,-1);

}

}

Бұл мысалдағы extends кілттік сөзі трансляторға Point класы үшін ішкі класс құрылатындығын хабарлайды. Бұл класта х және у айнымалыларын хабарлау қажет болмады. Себебі, Point3D класы Point суперкласының мұрагері.

Динамикалық құрылымдар

Программаны компиляциялау барысында барлық айнымалылардың есімдері жады ұяшықтарының адрестеріне түрлендіріледі. Осы адрестер бойынша айнымалылардың сәйкес мәндері сақталады. Көрсеткіштердің көмегімен программист тікелей ұяшық адрестерімен жұмыс істей алады. Көрсеткіш дегеніміз өзінің мәні ретінде ұяшық адресін қабылдай алатын айнымалы. Көрсеткіш типтелген немесе типтелмеген болуы мүмкін. Егер көрсеткіш берілген типті айнымалыға сілтеме жасаса, онда оны типтелген көрсеткіш деп атайды.

Өрістерінің бірі көрсеткіш болып келетін кластар жадыда сызықты және сызықты емес байланысқан құрылымдарды анықтауға мүмкіндік береді. Сызықты байланысқан құрылымдарға стектер, кезектер, тізімдер жатады. Тізімдер көрсеткіштер санына және олардың өзара байланысуына қарай бір бағытталған, екі бағытталған, сақина түріндегі тізімдерге бөлінеді.

Сызықты емес құрылымдарға ағаштар, графтар жатады.

Тізімге қолданылатын негізгі операциялар:

  • бос тізімді құру;

  • тізімнің элементтерінің бар болуын анықтау;

  • алдыңғы, кейінгі элементтерінің бар болуын анықтау;

  • ағымдағы элемент ретінде алғашқы, соңғы, алдыңғы, кейінгі элементтерді алу;

  • ағымдағы элементтің мәнін алу;

  • ағымдағы элементті негізгі типті басқа мәнге өзгерту;

  • ағымдағы элемнет ретінде алдыңғы немесе кейінгі элемент болатындай ағымдағы элементті тізімнен шығару;

  • ағымдағы элементтің алдына немесе кейін жаңа негізгі типті элемент енгізу.

Тізімдерге қолданылатын операцияларды шектеу арқылы берілгендерді өңдеу барысында өте көп қолданылатын кезек, стек құрылымдарын алуға болады.

Кезекке қолданылатын негізгі операциялар:

  • бос кезекті құру;

  • кезектің элементтерінің бар болуын анықтау;

  • кезектің алғашқы элементін оны кезекте жою арқылы алу;

  • типі негізгі типке сәйкес элементті кезектің соңына орналастыру.

Стекке қолданылатын негізгі операциялар:

  • бос стекті құру;

  • стектің элементтерінің бар болуын анықтау;

  • стектің соңғы элементін оны стектен жою арқылы алу;

  • типі негізгі типке сәйкес элементті стектің соңына орналастыру.

Ағашқа қолданылатын негізгі операциялар:

  • тривиальді ағашты құру;

  • ағаштың түбірін алу;

  • берілген түбірдің ішкі ағаштар тізімін алу;

  • ағаштың түбірін алмастыру;

  • берілген түбірдің ішкі ағаштар тізімін алмастыру;

Графтарға қолданылатын негізгі операциялар:

  • бос графты құру;

  • тізімдерге арналған барлық негізгі операциялар.

Келтірілген операциялар аргументтері, қайтарылатын мәндері операцияның қызметіне сәйкес болатындай әдістер ретінде ұйымдастырылуы керек.

Ағаштарды белгілі бір негізгі типтен құрылған құрылымдар жиыны анықтайды. Әр бір құрылым төбеден немесе берілген ағаштың түбірінен және берілген ағаштың ішкі ағаштары болып саналатын элементтер тізімінен тұрады. Ішкі ағаштары жоқ ағаш тривиальды ағаш деп аталады. Тривиальды ішкі ағаштың түбірі жапырақ деп аталады.

Бағытталған графтарды төбелер деп аталатын Т типті элементтерден тұратын тізім және доғалар деп аталатын Q типінен тұратын элементтер тізімі анықтайды. Әр бір төбе үшін осы төбеден шығатын доғалар тізімі және осы төбеге кіретін доғалар тізімі бар болады. Бос төбелер және бос доғалар тізімінен тұратын графты бос граф деп атайды. Ал тек доғасыз бір ғана төбеден тұратын графты тривиальды граф деп атайды.

Графтарды төбелер деп аталатын Т типті элементтерден тұратын тізім және қабырғалар деп аталатын Q типінен тұратын элементтер тізімі анықтайды. Әр бір төбе үшін осы төбеден шығатын (инцидентті) қабырғалар тізімі, ал әрбір қыр үшін осы қыр қосатын екі элементтен тұратын тізім анықталады.

Әдебиеттер

  1. Васильев А.Н. Java. Объектно-ориентированное программирование: Учеб. пособ. – СПб.: Питер, 2011. – 400 с. [В]

  2. Казарин С.А., Клишин А.П. Среда разработки Java-приложений Eclipse: (ПО для объектно-ориентирован-ного программирования и разработки приложений на языке Java): Учеб. пособ., Москва, 2008. – 77 с. [К]

  3. Монахов В.В. Язык программирования Java и среда NetBeans. – 3-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2011. – 704 с.

8 дәріс. Пакеттер мен интерфейстер

Дәріс мақсаты: Java пакеттері, интерфейстер, интерфейсті сілтемелер, интерфейстердің кеңейілуімен танысу, Мысалдар келтіру.

Визуалды программалауды жүзеге асыру үшін мұрагерлікті қолданып алдын - ала анықталған кластардың сипаттамаларын енгіземіз. Ол үшін import конструкциясы қолданылады. Текстік өріске енгізілген санды алып, кездейсоқ сандармен толтырылған массивте cол санның кездесетіндігін анықтау программасы. Java тілін меңгеруді жалғастыру үшін қосымша тапсырмалар.

Массивте іздестіру есептері

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.JTextArea;

import javax.swing.JButton;

import java.util.Random;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class Find_num extends JFrame implements ActionListener{

private JLabel label;

private JTextField text;

private JTextArea ta;

private JButton button;

private int[] num;

private boolean found = false;

private int number, i;

public Find_num(){

setTitle("Массивтегі санды анықтау");

//Терезе тақырыбы

this.setLayout(null);

label = new JLabel("Санды енгізу:");

//Тұрақты текстік өріс құру

text = new JTextField();

//Текстік өріс құру

ta = new JTextArea();

//Текстік аймақ құру

button = new JButton("Табу");

//Батырма құру

label.setBounds(20, 130, 110, 15);

//Тұрақты текстік өрістің параметрлерін беру

this.add(label);

//Терезеге тұрақты текстік өріс қосу

text.setBounds(120, 130, 30, 20);

//Текстік өрістің параметрлерін беру

this.add(text);

//Терезеге текстік өріс қосу

ta.setBounds(20, 20, 217, 100);

//Текстік аймақтың параметрлерін беру

ta.setLineWrap(true);

//Текстік аймақта жолды тасымалдауды анықтау

ta.setEditable(false);

//Текстік аймақта мәліметтерді өзгерту мүмкіндігін алып тастау

button.setBounds(160, 130, 80, 20);

//Батырманың параметрлерін беру

Random rg = new Random();

//Кездейсоқ сандар объектісін құру

num = new int[70];

//Бүтін типті 70 саннан тұратын массив құру

for(i=0; i<70; i++){

//Массив элементтерін анықтау циклі

num[i] = rg.nextInt(100);

//Массив элементіне (0..100) аралығындағы кездейсоқ санды меншіктеу

ta.append(num[i] + " ");

//Массив элементі текстік аймақта бейнеленеді

}

this.add(button);

//Терезеге кнопканы қосу

button.addActionListener(this);

//Батырмаға әрекетті қосу

this.add(ta);

//Текстік аймақты терезеге қосу

this.setSize(270, 200);

//Терезенің өлшемдерін беру

this.setVisible(true);

//Терезенің көрінуін анықтау

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );

//Терезенің жабылуы кезіндегі келісім бойынша анықталған операцияны беру

}

public void actionPerformed(ActionEvent e){

//әрекетті анықтау

if(e.getSource() == button){

//егер әрекет көзі button батырмасы болса

if(!text.getText().equals("")&&isIntNumber(text.getText())){

//текстік өрісте санның бейнесі болса

number = Integer.parseInt(text.getText());

//тексті санға түрлендіріп number айнымалысына меншіктеу

for(i=0; i<70;i++){

//массивте енгізілген санның кездесетіндігін анықтау циклі

if (number == num[i]){

//егер сан ағымдағы элементке тең болса

found = true;

//found айнымалысына ақиқат мәнін меншіктеу және

break;

//циклді аяқтау

}

}

if (found)

//егер found айнымалысының мәні ақиқат болса

JOptionPane.showMessageDialog(null,"Сәйкес элемент номері" + (i+1) + ". Іздестіру сәтті аяқталды.");

//хабарламасы бар терезені шығару

else

//егер found айнымалысың мәні жалған болса

JOptionPane.showMessageDialog(null, "Сәйкестік табылмады.");

// хабарламасы бар терезені шығару

}

else

//егер өрісте бос жол немесе цифрдан өзге символ болса

{

JOptionPane.showMessageDialog(null, "Сан енгізіңіз!");

// хабарламаны терезеге шығару

text.setText("");

//өрісті тазарту

}

}

}

public static void main(String args[]){

Find_num fn = new Find_num();

}

public boolean isIntNumber(String num){

//сандық мәнді анықтау функциясы

try{

Integer.parseInt(num);

//тексті бүтін санға түрлендіру

}

catch(NumberFormatException nfe){

//қате туындау барысында

return false;

//жалған мәнін қайтару

}

return true;

//кері жағдайда ақиқат мәнін қайтару

}

}

Әдебиеттер

  1. Васильев А.Н. Java. Объектно-ориентированное программирование: Учеб. пособ. – СПб.: Питер, 2011. – 400 с. [В]

  2. Казарин С.А., Клишин А.П. Среда разработки Java-приложений Eclipse: (ПО для объектно-ориентирован-ного программирования и разработки приложений на языке Java): Учеб. пособ., Москва, 2008. – 77 с. [К]

  3. Монахов В.В. Язык программирования Java и среда NetBeans. – 3-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2011. – 704 с.