5 дәріс Дестелер (Пакет) мен ішкі дестелер. Класс мүшелеріне қатынау. Дестелерді орналастыру. Кластар мен дестелерді импорттау.
Дестені құру
Ішкі дестелер (Sub-packages)
Класс мүшелеріне қатынау модификаторлары
Дестелерді орналастыру (Package Structure)
Кластар мен дестелерді импорттау
Java-файлдар мен олардың ұйымдастырылуы
Дестелер және интерфейстер
649.00K
Category: programmingprogramming

Дестелер (пакет) және ішкі дестелер. Класс мүшелеріне қатынау. Дестелерді орналастыру. Кластар мен дестелерді импорттау. Java-файлдар

1. 5 дәріс Дестелер (Пакет) мен ішкі дестелер. Класс мүшелеріне қатынау. Дестелерді орналастыру. Кластар мен дестелерді импорттау.

5 ДӘРІС
ДЕСТЕЛЕР (ПАКЕТ) МЕН ІШКІ ДЕСТЕЛЕР.
КЛАСС МҮШЕЛЕРІНЕ ҚАТЫНАУ.
ДЕСТЕЛЕРДІ ОРНАЛАСТЫРУ.
КЛАСТАР МЕН ДЕСТЕЛЕРДІ ИМПОРТТАУ.
JAVA-ФАЙЛДАР

2.

1. Дестелер (Packages) және олардың маңызы
Дестелер (packages) — Java тілінде кластарды
ұйымдастыру және құрылымдау үшін қолданылатын
механизм.
Олар
кодтың
қайта
пайдаланылуын
қамтамасыз етеді, атаулар қақтығысын (namespace
conflicts)
болдырмайды
басқаруды жеңілдетеді.
және
үлкен
жобаларды

3. Дестені құру

ДЕСТЕНІ ҚҰРУ
Дестені анықтау үшін package кілттік сөзі қолданылады.
Мысалы:
package mypackage;
public class MyClass {
public void display() {
System.out.println("Бұл - MyClass класы!");
}
}
Бұл код mypackage атты дестеде MyClass класын
анықтайды.

4. Ішкі дестелер (Sub-packages)

ІШКІ ДЕСТЕЛЕР (SUB-PACKAGES)
Ішкі дестелер үлкен жобаларды логикалық түрде ұйымдастыруға көмектеседі. Javaда ішкі дестелерді нүкте (.) арқылы бөледі.
Мысалы, com.example.utils ішкі дестесі com.example дестесінің ішінде орналасқан:
package com.example.utils;
public class Utility {
public static void printMessage() {
System.out.println("Бұл - көмекші класс!");
}
}

5. Класс мүшелеріне қатынау модификаторлары

КЛАСС МҮШЕЛЕРІНЕ ҚАТЫНАУ
МОДИФИКАТОРЛАРЫ
Модификатор
Сипаттамасы
public
Барлық жерден қатынауға болады
protected
private
(әдеттегі, модификаторсыз)
Сол дестеде және туынды
кластарға қолжетімді
Тек сол кластың ішінде ғана
қолжетімді
Сол дестенің ішіндегі кластарға
ғана қолжетімді

6.

Мысалы:
package mypackage;
public class Person {
private String name;
protected int age;
public String country;
public Person(String name, int age, String country) {
this.name = name;
this.age = age;
this.country = country;
}
}

7. Дестелерді орналастыру (Package Structure)

ДЕСТЕЛЕРДІ ОРНАЛАСТЫРУ
(PACKAGE STRUCTURE)
Java-дестелер
каталог
құрылымына
сәйкес
ұйымдастырылады.
Егер com.example.utils дестесі болса, онда файлдық
құрылымы келесідей болады:
/com/example/utils/Utility.java
Компиляциядан кейін .class файлдар сол каталогтарға
сәйкес сақталады.

8. Кластар мен дестелерді импорттау

КЛАСТАР МЕН ДЕСТЕЛЕРДІ
ИМПОРТТАУ
Дестелердегі кластарды қолдану
операторын пайдалануға болады.
Жеке классты импорттау
import mypackage.MyClass;
public class Main {
public static void main(String[] args) {
MyClass obj = new MyClass();
obj.display();
}
}
үшін
import

9.

Барлық кластарды импорттау
import mypackage.*;
Бұл
жол
барлық
кластарды импорттайды.
mypackage
дестесіндегі

10. Java-файлдар мен олардың ұйымдастырылуы

JAVA-ФАЙЛДАР МЕН ОЛАРДЫҢ
ҰЙЫМДАСТЫРЫЛУЫ
Java-файлдар .java кеңейтімімен сақталады. Әрбір .java
файлы бір немесе бірнеше класс немесе интерфейсті қамтуы
мүмкін, бірақ файл атауы public класстың атымен сәйкес
болуы керек.
Мысалы, MyClass.java файлы:
public class MyClass {
public void show() {
System.out.println("Hello, Java!");
}
}
Компиляциядан кейін javac MyClass.java командасы
MyClass.class файлын шығарады.

11. Дестелер және интерфейстер

ДЕСТЕЛЕР ЖӘНЕ ИНТЕРФЕЙСТЕР
Десте – сынып атауларын оқшаулау үшін пайдаланылатын
контейнер түрі (C++ тілінде пакеттің баламасы аттар кеңістігі
болып табылады).
Дестені құру үшін файлдың басында болуы керек package
түйінді сөзі қолданылады (егер ондай сөз жоқ болса, онда
файлдағы класстар атаусыз аттар кеңістігіне түседі).

12.

Егер сіз сыныпты белгілі бір бумаға тиесілі деп
жарияласаңыз, мысалы, packagejava.awt.image; онда
осы сыныптың бастапқы коды java/awt/image
каталогында сақталуы керек.
Java аудармашысы пакет иерархиясының түбірі
ретінде қарастыратын каталогты CLASSPATH
ортасының
айнымалы
мәні
арқылы
орнатуға
болатынын атап өткен жөн.
Бұл айнымалыны бума иерархиясы үшін бірнеше
түбірлік каталогтарды орнату үшін де пайдалануға
болады (кәдімгі PATH сияқты).

13.

Егер, мысалы, Myclass.java сыныбы жазылса және сынақ
бумасына орналастырылса, онда компиляциядан кейін бұл
сыныпты іске қосуға болады.
Myclassимпорт туралы мәлімдеме Файлдағы бума
мәлімдемесі әдетте импорт мәлімдемелерінен кейін келеді.
Импорттық мәлімдеменің жалпы нысанытөмендегіше:
импорт бума1 [.package2].(сынып атауы|*);
мұндағы
бума1 – жоғарғы деңгейлі буманың атауы,
бума2 – нүктемен бөлінген бірінші бума ішінде
кірістірілген буманың қосымша атауы.
Соңында, бума иерархиясында жолды көрсеткеннен кейін
сынып атауы немесе жұлдызша метатаңбасы көрсетіледі.
Жұлдызша Java аудармашысына бума нақты көрсетілмеген
кез келген сынып қажет болса, ол сынып атауының орнына
жұлдызшамен пакеттің бүкіл мазмұнын қарау керек дегенді
білдіреді.

14.

Төмендегі код үзіндісі импорт мәлімдемесін пайдаланудың екі түрін де
көрсетеді::
import java.util.Date
import java.io.*;
Мысал қарастырайық:
package р1;
public class Protection {
int n = 1;
private int n_pri = 2;
protected int n_pro = 3;
private protected int n_pripro = 4;
public int n_pub = 5;
public Protection() {
System.out.println("base constructor");
System.out.println("n="+n);
System.out.println("n_pri="+n_pri);
System.out.println("n_pro="+n_pro);
System.out.println("n_pripro="+n_pripro);
System.out.println("n_pub="+n_pub);
}
}
Protection класы p1 бумасына тиесілі.

15.

Импорттау мәлімдемесіне қоса, сіз статикалық
импортты да пайдалана аласыз.
Сыныптың статикалық мүшелеріне қол жеткізу үшін
сыныпқа сілтеме қажет.
Мысалы, Math сынып атауын көрсету керек:
double r = Math.cos (Math.PI * тета);
Статикалық импортты пайдалану сынып сілтемесінің
қажеттілігін жояды:
import static java.lang.Math.*;
…………………..
double r = cos(PI * theta);

16.

Интерфейстер
Java интерфейстері орындау уақытында динамикалық
әдісті таңдауды қолдауға арналған.
Интерфейстер класстарға ұқсас, бірақ соңғысынан
айырмашылығы интерфейстерде айнымалылар болмайды.
Класста интерфейстердің кез келген саны болуы мүмкін.
Интерфейс абстрактілі сыныптан да ерекшеленеді.
Java тілінде класс интерфейсті жүзеге асырса (мұраға
алса), онда ол интерфейсте жарияланған әдепкі әдістерден
басқа барлық әдістерді жүзеге асыруы керек.

17.

Интерфейстер
Java интерфейстері орындау уақытында динамикалық
әдісті таңдауды қолдауға арналған.
Интерфейстер
класстарға
ұқсас,
бірақ
соңғысынан
айырмашылығы интерфейстерде айнымалылар болмайды.
Класста интерфейстердің кез келген саны болуы мүмкін.
Интерфейс абстрактілі сыныптан да ерекшеленеді.
Java тілінде класс интерфейсті жүзеге асырса (мұраға
алса), онда ол интерфейсте жарияланған әдепкі әдістерден
басқа барлық әдістерді жүзеге асыруы керек.

18.

Интерфейс туралы мәлімдеме интерфейс кілт сөзін
пайдаланады. Сондай-ақ интерфейсте тұрақты мәндерді
жариялауға
болады.Бұл.
интерфейс
анықтамасы
келесідей көрінеді:
interface имя {
тип_результата имя_метода1(список
параметров);
тип имя_final-переменной = значение;
}
(соңғы модификаторды алып тастауға болады, ол
автоматты түрде қосылады).
Мысал қарастырайық:

19.

interface Callback {
void callback(int param);
}
Интерфейстерді кеңейтуге болады.
Мысал қарастырайық:
Interface FloorWax{
double f();
}
interface DessertTopping{
int Myconst=10;
double f1();
}
interface Shimmer extends FloorWax, DessertTopping
{
//интерфейстің кеңейтілімі
double amazingPrice();
}

20.

Java 8 кілт сөзді пайдаланып интерфейске дерексіз әдістерді
енгізуге мүмкіндік береді default.
Мысалы:
interface A{
void g();
default void f(){
System.out.println("Method f");
}
}
сlass B implements A{
public void g(){
System.out.println("Method g");
}
}
public class JavaApplication104 {
public static void main(String[] args) {
A pa=new B();
pa.f(); //Экранда
Method f
}
}

21.

әдепкі (default ) әдістерді қайта анықтауға
болады
interface A{
void g();
default void f(){
System.out.println("Method f");
}
}
class B implements A{
public void f(){
System.out.println("Method f_B");
}

22.

public void g(){
System.out.println("Method g");
}
}
public class JavaApplication104 {
public static void main(String[] args) {
A pa=new B();
pa.f();
//Экранда
Method f_B
}
}

23.

interface A{
void f(int a);
}
interface B extends A{
default void f(int a){}
}
class C implements B{ //дұрыс код
}
public class Main {
public static void main(String[] args) {
C pc=new C();
}
}

24.

Дегенмен келесі код компиляцияны қате шақырады
interface A{
void g();
default void f(){
System.out.println("Method f_A");
}
}

25.

interface C {
default void f(){
System.out.println("Method f_C");
}
}
class B implements A,C{ //компиляция қатесі
public void g(){
System.out.println("Method g");
}
}

26.

Жоғарыдағы кодты келесідей қайта жазуға болады:
interface A{
void g();
default void f(){
System.out.println("Method f_A");
}
}
interface C {
default void f(){
System.out.println("Method f_C");
}
}

27.

class B implements A,C{
public void f(){
System.out.println("Method f_B");
}
public void g(){
System.out.println("Method g");
}
}

28.

Сондай-ақ интерфейстерде статикалық әдістерді
анықтауға болады:
interface A{
void f(int a);
static void g(){
System.out.println("Hello");
}
}
class B implements A{
public void f(int a){}
public class Main {
public static void main(String[] args) {
A.g();
}
}

29.

Интерфейсті іске асыру
Интерфейс applications кілт сөзі арқылы жүзеге
асырылады. Осылайша, интерфейсті жүзеге асыратын
класс келесідей болады:
class имя_класса [extends суперкласс] [implements интерфейс0 [,
интерфейс1...]] { тело класса }
Мысалы:
class Client implements Callback {
void callback(int p) {
System.out.println("callback called with " + p);
}
}

30.

Атау қақтығыстары (конфликты)
Егер екі әдіс тек шығарылған ерекшеліктер түрінде
ғана ерекшеленсе, интерфейсті жүзеге асыратын класс
әдісі бірдей қолтаңбалары бар екі мәлімдемеге де
сәйкес келуі керек (параметрлердің саны мен түрі),
бірақ өзіндік ерекшеліктерді шығаруы мүмкін.
Дегенмен, сынып ішіндегі әдістер тек шығарылған
ерекшеліктердің құрамында ғана ерекшеленбеуі керек.
Мысал қарастырайық:

31.

interface X {
void setup() throws SomeException;
}
interface Y {
void setup();
}
class Z implements X, Y {
public void setup() { ... }
}
Z сыныбында X.setup және Y.setup сәйкес бір іске
асыру болуы мүмкін.

32.

Әдіс өзінің суперсыныбында жарияланғаннан аз
ерекшеліктерді шығара алады, сондықтан Z.setup
жариялағанда, SomeException түріндегі ерекшелік
әдісте шығарылғанын көрсету қажет емес.
X.setup
тек
мүмкіндік береді.
осы
ерекшелікті
пайдалануға

33.

Ламбда өрнектері
Ламбда өрнегі синтаксисі болып табылады:
параметры->{тело функции}.
Параметр түрлерін өткізіп
Мысалдар қарастырайық.
жіберуге
Мысалы:
p -> return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
болады.

34.

interface MyInterface{
public void func(int a);
}
public class JavaApplication106 {
public static void f(MyInterface m){
m.func(20);
}
public static void main(String[] args) {
f(p->{int c=2*p; System.out.println(c);});
}
}
Бұл жағдайда қайтару қажет емес, өйткені lambda
функциясы ештеңені қайтармайды.

35.

Лямбда функциясы бірнеше параметрлерді қабылдай
алады:
interface MyInterface{
public int func(int a,int b);
}
public class JavaApplication106 {
public static void f(MyInterface m){
System.out.println(m.func(20,30));
}
public static void main(String[] args) {
f((p,p1)->{int c=p+p1; return c;});
}
}

36.

Ламбда функцияларын функционалды интерфейстерді жүзеге
асыру үшін пайдалануға болады:
class A {
int a;
public int getA(){
return a;
}
}
interface MyInterface{
public int func(A a);
}
public class Main {
public static void main(String[] args) {
MyInterface m=p->{return p.getA();};
A pa=new A();
pa.a=200;
System.out.println(m.func(pa));
}
}

37.

ҚОРЫТЫНДЫ
Дестелер кодты ұйымдастыруға көмектеседі.
Ішкі дестелер күрделі жобаларды басқаруға мүмкіндік
береді.
Класс мүшелеріне қатынау модификаторлары арқылы
қауіпсіздік және инкапсуляция қамтамасыз етіледі.
Импорттау
арқылы
басқа
дестелердегі
кластарды
бір
құрылымда
сақталып,
қолдануға болады.
Java-файлдар
компиляцияланады.
белгілі

38.

СӨЖ
1. y=|x-2|+|x+1| функция мәндерінің таблицасын шығаратын
бағдарлама жазыңыз. Аргументтің өзгеру аралығы -10-ден 12-ге
дейін, аргументтің кему аралығы 0,5 қадам.
2. Үшбұрыш
төбелерінің
координаттары
үшбұрыштың ауданын анықтаңдар.
берілген.
Сол
3. Егер берілген нақты x, y, z сандарының қосындысы 1-ден артық
болса, онда бұл үш санның ең кішісін қалған екі санның екі
еселенген көбейтіндісімен алмастырыңыз, кері жағдайда x және yтің кішісін қалған екеуінің жарты қосындысымен алмастырыңыз.
ДӘРІСТІҢ СОҢЫ
English     Русский Rules