SlideShare a Scribd company logo
Курс по програмиране
на
езика Java
Лекция 1.Въведение в
програмирането,въведение в Java
синтаксис
▸В този раздел ще се запознаем с основните
принципи на програмирането на ЕИМ и
граматиката (синтаксиса) на езика java.
Начални познания за програмирането
на съвременните компютри
▸Същността на програмирането е да се управлява
работата на компютъра и всички негови модули;
▸Управлението става с помощта на оператори
(команди) от програмиста към компютъра;
▸Програмистите са хората, които кодират командите на
определен програмен език;
▸ Всеки език е ориентиран към някое ниво на
управление на компютъра;
▸Някои езици са ориентирани към машинното ниво –
например асемблер, други са ориентирани към
системното ниво, например C. А други езици към високо
ниво, ориентирани към писането на приложни
програми. Такива са езиците Java, C++, C#, Visual Basic,
Python, Ruby, PHP и др.
Начални познания за програмирането
на съвременните компютри
Както ще видите в курса разработката на софтуер не е само
програмиране;
Разработването на софтуер включва много други процеси
като анализ на изискванията, проектиране, планиране,
тестване и поддръжка, в които участват не само
програмисти, но и много други специалисти;
Програмирането представлява малка, макар и много
съществена, част от разработката на софтуера;
В настоящия курс ще се спрем единствено върху
програмирането, което е единственото действие от
изброените по-горе, без което не можем да разработваме
софтуер.
Защо да програмираме на Java ?
▸Java e съвременен език за програмиране и
платформа за разработка и изпълнение на
софтуерни приложения;
▸На езика Java програмистите могат да кодират
кратки програми наречени аплети,които се
изпълняват само в средата на браузер (Google
Chromе, Internet Explorer, Mozilla) и др.
Предимства на езика Java
 Java е език от високо ниво, който прилича на C# и
C++ и донякъде на езици като Delphi, VB.NET и C. ;
 Java е един от най-популярните езици за
програмиране. На него пишат милиони
разработчици по цял свят ;
 Най-големите световни софтуерни корпорации като
IBM, Oracle, Google и SAP базират много от своите
решения на Java платформата и използват Java като
основен език за разработка на своите продукти.
Малко
история за
езика Java
Нека да започнем с малко история за
езика Java
▸Езикът Java е първоначално разработен и поддържан от
Sun Microsystems, но през 2006 г. Java платформата става
проект с отворен код ;
През 2010 г. Oracle купуват Sun и в момента Java
платформата се поддържа и развива от световната Java
общност начело с Oracle;
От големите софтуерни фирми Java не се ползва
единствено от Microsoft и Apple, тъй като те разработват и
поддържат собствени платформи, подобни на Java
платформата.
Още някои важни неща за езика Java
▸Езикът Java се разпространява заедно с платформата
Java това е специална среда, върху която се изпълнява Java
кодът, наречена Java Runtime Environment (JRE).
▸Тази среда включва Java виртуална машина (JVM) и
пакет стандартни библиотеки, предоставящи базова
функционалност за Java разработчиците. Благодарение на
нея Java програмите са преносими и след като веднъж
бъдат написани, след това почти без промени могат да
работят на стотици хардуерни платформи и операционни
системи като Windows, Linux,Mac OS и др.
▸Именно тази среда прави езика Java независим от
използваната хардуерна платформа или операционна
система
Още някои важни неща за платформата
на Java
За изпълнението на програми, написани на Java, е
необходимо да имате инсталиран Java Runtime
Environment (JRE). Това е специален софтуер, част от Java
платформата, който съдържа виртуалната машина и
стандартните Java библиотеки ;
JRE е софтуер, който крайният потребител инсталира
еднократно върху компютъра си, за да може да работи с
Java;
JRE не е стандартна част от Windows и Linux и трябва да
се инсталира допълнително !
За разработката на Java приложения е необходимо да
имате инсталиран Java Development Kit (JDK). Това е пакет
инструменти, с които вие като програмисти можете да
пишете Java програми, да ги компилирате и изпълнявате.
Eclipse – интегрирана среда за изпълнение
на Java програми
▸В практиката се използват следните две интегрирани
срдеди за изпълнение на Java програми (IDE): Eclipse ,
▸NetBeans.
▸Eclipse (www.eclipse.org) е мощна интегрирана среда за
разработка на софтуерни приложения. Eclipse е проект с
отворен код и предлага инстру-менти за всички етапи от
софтуерния жизнен цикъл. Тук ще разгледаме най-важните
функции – тези, свързани със самото програмиране –
писането, компилирането, изпълнението и дебъгването на
програми.
Eclipse – интегрирана среда за
изпълнение на Java програми-
продължение
▸Структура на визуалния интерфейс на Eclipse.
▸ Основна съставна част са перспективите. Всяка перспектива
съдържа един или повече визуализатори (views). Всеки
визуализатор реализира различна функция, свързана с
улесняване на програмирането. Да разгледаме най-използва-
ната перспектива – Java перспективата. Тя съдържа:
▸- Package Explorer – тук могат да се видят всички класове,
които съставят текущия проект на програма;
▸- Problems – показва грешките при компилация;
▸- Outline – показва свойствата и поведението (методите) на
селектиран Java клас;
▸- Console – показва стандартния изход, когато стартираме
програма.
Eclipse – интегрирана среда за изпълнение
на Java програми-продължение
▸Освен визуализатори в средата на работното
пространство стоят редакторите на Java файлове. В
Eclipse можем да редактираме едновременно произволен
брой файлове.
Съществуват още редица визуализатори с помощно
предназначение, които няма да разглеждаме тук.
Създаване на нов Java проект
Преди да направим каквото и да било в Eclipse, трябва да
създадем проект за него. Проектът логически групира
множество файлове, предназначени да реализират
произволна програма. За всяка програма е добре да се
създава отделен проект. Проект се създава чрез следване
на следните стъпки:
▸- File -> New -> Project;
▸- Избираме "Java Project";
Eclipse – интегрирана среда за изпълнение
на Java програми-продължение
Eclipse – интегрирана среда за изпълнение
на Java програми-продължение
▸Новосъздаденият проект се показва в Package
Explorer.
Запомнете следните важни неща за
обучението по Java
Нека да се спрем върху основните неща при изучаването на
езика Java.
За да се научите да програмирате на Java не са необходими
начални познания;
За да се научите да програмирате на Java не е необходимо да
сте учили информационни технологии или компютърни науки,
за да четете и разбирате учебния материал в курса;
Ако учите университетска специалност, свързана с
компютърните технологии или в училище учите
информационни технологии, това само ще ви помогне, но не е
задължително !
Предимства на Java спрямо другите
обектно-ориентирани езици като
C,C++
C/C++ са платформено зависими
езици, което изисква отделни
компилатори;
В C/C++ се използват указатели с
адреси към обекти;
За разработване на графични
приложения в C/C++ са
необходими специални
библиотеки ;
В C/C++ сьществува множествено
наследяване което прави
програмите трудно разбираеми
▸Java е платформено
независим език;
▸В Java всичко е обект;
▸В Java не се използват
указатели с адреси;
▸В Java лесно се
вграждат графични
обект(Java Swing);
▸В Java няма
множествено
наследяване, а само
интерфейси
Да започнем с нашата първа
примерна програма на Java !
public class HelloJava
{
public static void main(String[] arguments) {
System.out.println("Hello, Java");
}
}
Основна структура на програмата на
Java
▸Програмата на Java се състои от класове (шаблони) и
обекти от тези класове, които са дефинирани в пакетите
(packages) в езика Java;
▸Пакетите се включват посредством оператора „import” в
началото на програмата на java;
▸Във всеки клас програмистът може да дефинира
функции(методи) и променливи (полета) ;
▸ полетата задават обукновено свойствата на обектите от
класа, а методите тяхното състояние;
▸В програмата на Java има една главна функция (main) от
която започва изпълнението на програмата (входна точка);
▸В програмата на Java трябва да има един „общо достъпен
„ клас (public), който има същото име както сорс файла на
Java
Структура на виртуалната машина на Java
Сърцето на програмната среда на Java е нейната
виртуална машина!
Граматика (синтаксис) на Java
▸Всеки език за програмиране подобно на говоримите
езици има граматични правила (синаксис), което важи и
за Java:
▸Java се състои от отделни инструкции (команди), които
са изградени от ключови думи (keywords) и
аритметични или логически оператори като
събиране,изваждане, умножение, деление, отри-
цание,конюнкция,дизюнкция,несъвпадение и др.;
▸Всяка команда на Java завършва с точка и запетая
(semicolon);
▸Отделните класове започват с ключовата дума class и
техните елементи са оградени с големи скоби { …..}
▸Ключовите думи заедно с аритметичните и логически
оператори образуват аритметични изрази в Java
Отделните синтактични единици и тяхното
взаимодействие в Java може да се предстви
със следната диаграма:
Functions
(methods)
Class in
Java
Objects of
class
Variables
(fields)
Да започнем с изучаването на ключовите
думи на езика Java
▸Езикът Java използва следните основни ключови думи:
Продължаваме с изучаването на
платформата на Java
Java platform Standard edition (JSE)
Java Platform Enterprice Edition (EE)
▸
Java Platform Micro edition (ME)
Лекция 2.Променливи в езика Java-
глобални, локални, видове
променливи
▸В този раздел ще се запознаем с основните
видове променливи и константи в Java и
тяхното дефиниране и използване, които са
основата при кодиране на програмите на Java!
Променливи в езика Java
▸Какво представляват променливите в java ?
▸Променливите са адреси на клетки от оперативната памет
(RАМ) на PC , в които програмата на потребителя записва
стойности от опеределен тип(цели числа , реални
числа,символи,низове и др.);
▸Стойностите на променливите се променят по време на
изпълнение на програмата!
▸Константите в програмата на java се означават с
модификатора final-техните стойности не се променят по
време на изпълнение на програмата!
▸Имената на променливите трябва да започват с буква, знак
за долар или “_”;
▸Пред името на променливата програмиста трябва да
декларира нейния тип (int,float,double,char,string и др.);
▸Програмистът може да зададе и стойност на променливата
при нейната декларация!
Примери за използване на
променливи
public class ComputeArea {
/** Main method - това е коментар към програмата!! */
public static void main(String[] args) {
double radius; //promenliwa ot typ double
double area;
int i; //promeliwa ot typ integer
// Assign a radius
radius = 20;
final double pi= 3.14159; //constanta pi ot typ double
// Compute area
area = radius * radius *pi;
// Display results
System.out.println("The area for the circle of radius " +
radius + " is " + area);
}
}
Видове променливи в Java
▸Променливите в Java могат да се разделят на:
▸Локални променливи декларирани в рамките на
функция,блок;
▸Обектни (динамични) променливи декларирани
в даден клас, които съществуват само по време на
съществуване наобекта;
▸Статични променливи, които съществуват по
време на изпълнение на цялата програма на Java-
те се отбелязват с модификатор “static “;
▸Пример:
▸ static int i=1; static float k=1.5;
Променливи в Java
▸Какво трябва да запомните ?
▸Обектните (динамични) променливи
съществуват в паметта докато съществува
обекта- след това автоматично се изтриват от
JVM;
▸Статичните променливи съществуват
докато съществува програмата на Java
▸Стойността на статичната променлива се
споделя от всички обекти в програмата на
Java
Типове данни в Java
▸1. Примитивни типове данни
• integer 4 bytes
• short 2 bytes
• long 8 bytes
• byte 1 byte
• float 4 bytes
• double 8 bytes
• Char Unicode encoding -2 bytes
• boolean {true, false} - 1 byte
Синтаксис на програмата на Java
▸Програмата на Java започва с деклариране на
използваните пакети от библиотеките на Java (import
java.util.*;);
▸В Програмата на Java трябва да се декларират всички
класове и методи и променливи в тях;
▸Програмата на Java може да съдържа коментари за един
ред - // xxxxxxxxxxxxx
▸Или коментари за няколко реда които се означават с /*
xxxxx
▸Xxxxxx */
▸Програмата на Java трябва да съдържа главен метод
/public static void main(String args[]) / в клас public;
Видове константи в Java
• Числови константи.Примери:
37 integer
37.2 float
42F float
0754 integer (octal)
0xfe integer (hexadecimal)
▸Цялата част се отделя от дробната с точка;
▸Шестнайсетичните константи се записват с
▸‘0x’ в началото
Типове данни в Java- продължение
▸Обвиващи типове данни (Wrapper type):
▸Примери:
▸Integer n = new Integer(“4”);
▸int m = n.intValue();
▸Float f=new Float(“4.25”);
▸Float f2=f.floatValue();
▸Double d=new Double(“4.55”);
Типове данни „референции към
обекти“ в езика Java
▸Типове данни „референции към обекти“
представляват променливи, които съдържат
адреса (референцията) към конкретен обект в
оперативната памет.Обектите в Java биват
следните основни видове:
• Обекти дефинирани като инстанции на класове
или интерфейси (class , interface);
• Обекти от типа низ (string);
• Обекти от типа масив (array);
• Пример:
▸Animal[] arr; // nothing yet …
▸arr = new Animal[4]; // only array of pointers
▸String Booktitle;
▸Booktitle=“Java book”;
Обектни типове данни
▸Обектните типове данни са: масиви,низове и типовете
данни дефинирани чрез класове или интерфейси:
array[],string,class Type { };
▸Animal[] arr; // nothing yet …
▸arr = new Animal[4]; // only array of pointers
▸for(int i=0 ; i < arr.length ; i++) {
▸ arr[i] = new Animal();
▸// now we have a complete array
▸}
Преобразуване (конвертиране) на
типове в Java
В Java съществува два типа преобразуване на типове:
▸Преобразуване на примитивни типове данни;
▸Преобразуване на обектни типове данни;
▸1. Преобразуване на примитивни типове данни.
▸Това преобразуване може да бъде
неявно(автоматично се извършва от компилатора)
или явно (задава се от програмиста);
▸Неявното преобразуване се нарича още
преобразуване с разширение, защото компилаторът
„разширява“ по-тесния тип на присвояваната
променлива към по-широк тип данни.Неявното
преобразуване е показано на следната диаграма:
Преобразуване (конвертиране) на
типове в Java-продължение
Преобразуване (конвертиране) на
типове в Java-продължение
▸Друг вид конвертиране на примитивни типове е
конвертиране с аритметично увеличаване на
типовете.Това преобразуване се извършва от
компилаторът при обработката на аритметични изрази.
Пример:
▸Short s=9;
▸Int i=10;
▸Float f = 11.1f;
▸Double d=12.34;
▸If (-s*I >=f/d ) System.out.println (“Greater value”);
▸ else
▸ System.out.println (“Less value”);
▸
Преобразуване (конвертиране) на
типове в Java-продължение
▸При явното преобразуване програмистът указва на
Java типът към който се преобразува променливата:
▸Пример:
▸Short s=299;
▸Byte b=(byte) s;
▸System.out.println(“b=“ + b);
▸Int i=2;
▸Double radians;
▸Radians=(double) I;
Преобразуване (конвертиране) на
типове в Java-продължение
▸Конвертиране на референции към обекти:
▸При този тип конвертиране се използват следните
правила:
▸Типът интефейс може да бъде конвертиран само в тип
интерфейс или Object;
▸Типът клас може да бъде конвертиран само в тип клас
или в тип интерфейс, като старият тип трябва да е
подтип на новия;
▸Тип масив може да бъде конвертиран в масив или в клас
Object или интерфейси Cloneable,Serializable;
▸Общото правило при конвертиране на референции
гласи,че може да бъдат конвертирани обекти от
подкласове към надкласове в дървото на йерархията на
класовете .На върха на йерархията се намира клас “Object”.
Преобразуване (конвертиране) на
типове в Java-продължение
▸Диаграмата на преобразуване
на режферентни типове е
показана по-долу:
Преобразуване (конвертиране) на
типове в Java-продължение
(обобщение)
▸Конвертирането на примитивните типове се извършва при:
▸Конвертиране при присвояване;
▸Конвертиране при извикване на метод;
▸Конвертиране при аритметично увеличаване на типове;
▸Явно преобразуване на типове.
▸Конвертирането на референции към обекти се извършва при:
▸Конвертиране при присвояване;
▸Конвертиране при извикване на метод;
▸Явно преобразуване на типове.
▸Общото правило гласи, че неявното конвертиране е
разрешено при „движение“ нагоре по дървото на
наследяването.
Лекция 3.Операции и аритметични
операции в езика Java
▸В този раздел ще разгледаме основните
аритметични и логически операции в езика
Java и как те се използват.
Аритметични операции в Java
▸В Java както и в останалите езици за
програмиране съществуват следните пет основни
аритметични операции:
▸Събиране (+);
▸Изваждане (-);
▸Умножение (*);
▸Деление (/);
▸Деление по модул(остатъка от делението на
две цели числа (%);
▸Оператор за присвояване : (=);
Примери за аритметични операции
▸Int i=5; int j=8 ;float k=0.0; double v=1.0, w=2.0;
▸//v,w –are from the same type
▸K=(i*j)/2;
▸V=(5%j)*k;
▸System.out.println(“v=“+v);//console output
▸W=(k-v)/2+(i+j)/4;
▸System.out.println(“w=“+w); //console output
▸Long i=1024;int j=10555,k=0;
▸K=(int)(i*i+j*j)/4;
▸System.out.println(“k=“+k); //console output
4. Лабораторно упражнение 1. Java Lab 1
▸Примери за използване на основните аритметични и
логически операции в Java.
▸Пример 1.Изчисляване площ на кръг.
▸int r = (150-20) / 2 + 5;
▸// Expression for calculation of the surface of the circle
▸double surface = Math.PI * r * r;
▸// Expression for calculation of the perimeter of the circle
▸double perimeter = 2 * Math.PI * r;
▸System.out.println(r);
▸System.out.println(surface);
▸System.out.println(perimeter);
Java Lab 1- продължение
▸Резултат:
▸70
▸15393.804002589986
▸439.822971502571
▸Пример 2.
▸Побитови операции в Java
▸int n = 35; // 00100011
▸int p = 6;
▸int i = 1; // 00000001
▸int mask = i << p; // Move the 1st bit with p positions
▸// If i & mask are positive then the p-th bit of n is 1
▸System.out.println((n & mask) != 0 ? 1 : 0);
Java Lab 1- продължение
▸Пример 3.
▸Дефиниране на клас с използване на аритметичните
операции.
▸В този пример е дефиниран класът “ArithmeticDemo” с
основните аритметични операции:събиране (+),
▸изваждане(-), умножение(*) и деление (/), деление по
модул (%), както и операторът за присвояване (=).
▸В класа е дефинирана и основната функция public static
void main(), която се явява входна точка на програмата на
java.
Java Lab 1- продължение
▸class ArithmeticDemo
▸ {
▸ public static void main (String[] args) { int result = 1 + 2; // result
is now 3 System.out.println("1 + 2 = " + result); int original_result =
result; result = result - 1; // result is now 2
System.out.println(original_result + " - 1 = " + result);
original_result = result; result = result * 2; // result is now 4
System.out.println(original_result + " * 2 = " + result); o
▸riginal_result = result; result = result / 2; // result is now 2
▸//source code on the next page
Java Lab 1- продължение
▸System.out.println(original_result + " / 2 = " + result);
original_result = result; result = result + 8;
▸// result is now 10
▸ System.out.println(original_result + " + 8 = " + result);
▸original_result = result;
▸result = result % 7;
▸// result is now 3
System.out.println(original_result + " % 7 = " + result);
}
}
Лекция 5.Продължение-
операции,методи,параметри,матема-
тически функции в Java
▸В този раздел ще се спрем по подробно на
основните математически операции, функции
и тяхното използване в Java.
Логически операции в Java
▸Логическите операции в java са оператори, които се изпълняват
върху логически или числови променливи(тип
boolean,integer,double) и дават като резултат логическа единица или
нула(true, false). Това са операциите:
▸Инвертиране (NOT) или (!);
▸Логическо умножение (AND) или (&&);
▸Логическо сумиране (OR) или (||);
▸Логическо несъвпадение (XOR) или (^).
▸Примери:
▸0 <= x && x <= 9;
▸0<=x || y<=1;
▸If (!x) z=x + y; else z=(x + y)*(x-y);
▸If (x^y) System.out.println(“x differs from
y”);else System.out.println(“x is equal y”);
Логически операции в Java-примери
▸boolean a = true;
▸boolean b = false;
▸System.out.println(a && b); // false
▸System.out.println(a || b); // true
▸System.out.println(!b); // true
▸System.out.println(b || true); // true
▸System.out.println((5>7) ^ (a==b)); // false
Закони на де Морган,които се използват при
логическите операции:
▸!(a && b) == (!a || !b)
▸!(a || b) == (!a && !b)
Побитови операции в Java
▸Побитовите операции се изпълняват върху двоичния
код на конкретна променлива.Това са операциите:
▸Побитово отрицание (bitweise not) – (~);
▸Побитово умножение (bitweise and)-(&);
▸Побитово събиране (bitweise or) - (|);
▸Побитово сравнение (bitweise xor) - (^);
▸Побитово преместване на ляво (shift left) –(<<);
▸Побитово преместване на дясно (shift right) – (>>);
▸Побитово преместване на дясно със запълване с
„1“
▸(>>>);
Оператор за слепване на
низове(конкатенация)
▸Операторът за слепване на низове (+) съединява два
или повече низа последователно, като ако другият
оператор не е низ(операция “tostring”) той автоматично
се преобразува в низ и може да бъде
разпечатан.Примери:
▸String first = "Star";
▸String second = "Craft";
▸System.out.println(first + second); // StarCraft
▸String output = first + second + " ";
▸int number = 2;
▸System.out.println(output + number);
▸// StarCraft 2
Побитови операции в Java-примери
▸short a = 3; // 0000 0011 = 3
▸short b = 5; // 0000 0101 = 5
▸System.out.println( a | b); // 0000 0111 = 7
▸System.out.println( a & b); // 0000 0001 = 1
▸System.out.println( a ^ b); // 0000 0110 = 6
▸System.out.println(~a & b); // 0000 0100 = 4
▸System.out.println(a << 1); // 0000 0110 = 6
▸System.out.println(a << 2); // 0000 1100 = 12
▸System.out.println(a >> 1); // 0000 0001 = 1
Примери за аритметични операции в
Java
▸Операции инкрементиране и декрементиране-стойността
на променливата се увеличава(намалява) с 1:
▸ x++; //x=x+1; y--; //y=y-1;
▸int squarePerimeter = 17; double squareSide =
squarePerimeter / 4.0; double squareArea = squareSide *
squareSide;
▸System.out.println(squareSide); // 4.25
▸System.out.println(squareArea); // 18.0625
▸int a = 5; int b = 4;
▸System.out.println(a + b); // 9
▸System.out.println(a + b++); // 9
▸System.out.println(a + b); // 10
▸System.out.println(a + (++b)); // 11
▸System.out.println(a + b); // 11
▸System.out.println(14 / a); // 2
▸System.out.println(14 % a); // 4
Операции за сравнение в Java
▸Операторите за сравнение в Java са шест на
брой и сравняват стойностите на две
променливи или два аритметични израза:
▸ a>b;
▸ a<b;
▸ a==b;
▸ a>=b;
▸ a<=b;
▸ a!=b;
▸ a+b >a-b;
▸Като резултат от сравнението се получава
логическа стойност –true (вярно) или false
(невярно).
Операции за сравнение в Java-
примери
▸Примери за операции за сравнение:
▸public class RelationalOperatorsDemo
▸ {
▸public static void main(String args[]) {
▸int x = 10, y = 5;
▸System.out.println("x > y : " + (x > y)); // true
▸System.out.println("x < y : " + (x < y)); // false
▸System.out.println("x >= y : " + (x >= y)); // true
▸System.out.println("x <= y : " + (x <= y)); // false
▸System.out.println("x == y : " + (x == y)); // false
▸System.out.println("x != y : " + (x != y)); // true
▸} }
Оператор за присвояване в Java
▸Операторът за присвояване присвоява стойност
(литерал) на променлива или стойност на аритметичен
израз на променлива.Този оператор е подобен на
оператора (=) в алгебрата.
▸Пример:
▸int x = 6;
▸String helloString = "Здравей стринг.";
▸int y = x;
▸Операторът за присвояване трябва да бъде
различаван от оператора за сравнение (==).
Оператор за присвояване в Java-
примери
▸Каскадно използване на операторът за
присвояване.Примери:
▸int x, y, z;
▸x = y = z = 25;
▸ float p,q,r;
▸ p=q=r=55.55;
▸System.out.println (“x=y=z=”+x);
▸System.out.println (“p=q=r=” +p);
▸ double z=Math.sqrt(x+y+z);
▸System.out.println (“z=“ + z);
▸Клас Math e вграден клас в пакета “java.lang.*” и в
него са дефинирани основните математически
функции като статични методи.
▸import static java.lang.Math.*;
6. Лабораторно упражнение 2.
Java Lab 2
▸Пример 1.
▸int cadence = 0;
▸anArray[0] = 100; //null element of array is 100
▸System.out.println("Element 1 at index 0: " + anArray[0]);
▸ int result = 1 + 2; // result is now 3
▸if (value1 == value2) System.out.println("value1 == value2");
▸//if statement by value1 =value 2;
Java Lab 2-продължение
▸Пример 2.Оператор за присвояване,
инкрементиране, декрементиране
▸// assignment statement
▸aValue = 8933.234; // increment statement aValue++; //
method invocation statement
▸aValue--; // decrement statement
▸System.out.println("Hello World!");
// object creation statement Bicycle
▸ myBike = new Bicycle();
Java Lab 2-продължение
▸Пример 3. Блоков оператор { }
▸class BlockDemo
▸{ public static void main(String[] args)
▸{ boolean condition = true;
▸if (condition) { // begin block 1
System.out.println("Condition is true."); }
// end block one
else
▸ { // begin block 2
▸ System.out.println("Condition is false.");
▸} // end block 2 } }
Java Lab 2-продължение
▸Пример 4.
▸aValue = 8933.234;
▸aValue++;
▸System.out.println("Hello World!");
▸System.out.println("Hello my friend!");
▸Bicycle myBike = new Bicycle();
▸Person Nikolaj=new Person();
▸Student Ivan = new Student();
Java Lab 2-продължение
▸Пример 5.Математически функции в класа Math
▸public static void main(String[] args) { int i = 7; int j = -9; double x
= 72.3; double y = 0.34; System.out.println("i is " + i);
System.out.println("j is " + j); System.out.println("x is " + x);
System.out.println("y is " + y); // The absolute value of a number is
equal to // the number if the number is positive or // zero and equal
to the negative of the number // if the number is negative.
System.out.println("|" + i + "| is " + Math.abs(i));
System.out.println("|" + j + "| is " + Math.abs(j));
System.out.println("|" + x + "| is " + Math.abs(x));
System.out.println("|" + y + "| is " + Math.abs(y));
System.out.println(x + " is approximately " + Math.round(x));
System.out.println(y + " is approximately " + Math.round(y)); // The
"ceiling" of a number is the // smallest integer greater than or equal
to // the number.
Лекция 7.Условни твърдения и
оператори.Оператори за сравнение в
езика Java.Булева алгебра.
▸Условните твърдения и оператори в java дават
възможност на програмиста да извърши разклонение
в алгоритъма на програмата по определено логическо
условие (твърдение). Те се дефинират с операторите:
▸If ( logical operator) op1 in Java;
▸ else op2 in Java;
▸Пример 1:
▸void applyBrakes()
▸ { // the "if" clause: bicycle must be moving
▸if (isMoving){ // the "then" clause: decrease current speed
currentSpeed--; } }
Условни твърдения и оператори-
продължение
▸Пример 2:
▸void applyBrakes()
▸{ if (isMoving) { currentSpeed--; }
▸ else { System.err.println("The bicycle has already stopped!"); }
▸ }
▸Пример 3:
▸class IfElseDemo
▸{ public static void main(String[] args) { int testscore = 76; char
grade;
▸if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade
= 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60)
{ grade = 'D'; } else { grade = 'F'; } System.out.println("Grade = " +
grade); } }
Оператори за сравнение в Java
▸Операторите за сравнение в Java се използват за
сравнение между стойностите на променлива и константа ,
две променливи , два аритметични израза или две
референции към обекти.Резултатът от сравнението е true
или false.Операторите са 6 на брой и са показани в
таблицата по-долу:
▸Оператор Действие
▸== равно
▸!= различно
▸> по-голямо
▸>= по-голямо или равно
▸< по-малко
▸<= по-малко или равно
Оператори за сравнение в Java-
продължение
▸Примери:
▸int weight = 700;
▸System.out.println(weight >= 500);
▸char sex = 'm';
▸System.out.println(sex <= 'f');
▸double colorWaveLength = 1.630;
▸System.out.println(colorWaveLength > 1.621);
▸Получаваме следния резултат:
▸true
▸false
▸true
Оператори за сравнение в Java-
продължение
▸Примери за сравнение на числа и символи:
▸System.out.println("char 'a' == 'a'? " + ('a' == 'a'));
▸System.out.println("char 'a' == 'b'? " + ('a' == 'b'));
▸System.out.println("5 != 6? " + (5 != 6));
▸System.out.println("5.0 == 5L? " + (5.0 == 5L));
▸System.out.println("true == false? " + (true == false));
▸Резултат:
▸char 'a' == 'a'? true
▸char 'a' == 'b'? false
▸5 != 6? true
▸5.0 == 5L? true
▸true == false? false
Оператори за сравнение в Java-
продължение
▸Пример за сравнение за реални числа с точност:
▸float value = 1.0f;
▸float sum = 0.1f + 0.1f + 0.1f + 0.1f + 0.1f +
▸0.1f + 0.1f + 0.1f + 0.1f + 0.1f;
▸System.out.println("Exact compare: " +
▸(sum==value));
▸System.out.println("Rounded compare: " +
▸(Math.abs(sum-value) < 0.000001));
▸Резултат:
▸Exact compare: false
▸Rounded compare: true
▸
Оператори за сравнение в Java-
продължение
▸Примери за сравнение на референции към
обекти(низове):
▸String str = "bira";
▸String anotherStr = str;
▸String bi = "bi";
▸String ra = "ra";
▸String thirdStr = bi + ra;
▸System.out.println("str = " + str);
▸System.out.println("anotherStr = " + anotherStr);
▸System.out.println("thirdStr = " + thirdStr);
▸System.out.println(str == anotherStr);
▸System.out.println(str == thirdStr);
Оператори за сравнение в Java-
продължение
▸Получаваме следния резултат:
▸str = bira
▸anotherStr = bira
▸thirdStr = bira
▸true
▸false
▸От посочения пример следва, че за сравнение на
референции на обекти може да се използва оператора
(==),но за сравнение на стойности на обекти в случая низов
трябва да се използва друг оператор (equals).
8.Лабораторно упражнение 3.
Java Lab 3
▸Пример 1. Оператор “switch” за избор на вариант.
▸public class SwitchDemo
▸ { public static void main(String[] args) { int month = 8; String
monthString; switch (month) { case 1:
▸ monthString = "January"; break; case 2:
▸monthString = "February"; break; case 3: monthString = "March";
break; case 4:
▸ monthString = "April"; break; case 5: monthString = "May";
break; case 6:
▸ monthString = "June"; break; case 7:
▸ monthString = "July"; break; case 8:
▸ monthString = "August"; break;
Java Lab 3-продължение
Пример 1. Оператор “switch”- продължение.
case 9:
▸ monthString = "September"; break;
▸case 10:
▸monthString = "October"; break;
▸case 11:
▸monthString = "November"; break;
▸case 12: monthString = "December"; break;
▸default: monthString = "Invalid month"; break; }
System.out.println(monthString);
▸ } }
Java Lab 3-продължение
▸Пример 2.Побитов оператор “AND”
▸class BitDemo
{ public static void main(String[] args)
{ int bitmask = 0x000F; int val = 0x2222; // prints "2"
System.out.println(val & bitmask);
} }
Пример 3.Побитови оператори.
public class Test
{ public static void main(String args[]) { int a = 60; /* 60 = 0011 1100
*/ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100
*/ System.out.println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
Java Lab 3-продължение
▸Пример 3.Побитови оператори-продължение.
▸c = a ^ b; /* 49 = 0011 0001 */ System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */ System.out.println("~a = " + c ); c = a
<< 2; /* 240 = 1111 0000 */ System.out.println("a << 2 = " + c );
▸c = a >> 2; /* 15 = 1111 */ System.out.println("a >> 2 = " + c );
▸ c = a >>> 2; /* 15 = 0000 1111 */ System.out.println("a >>> 2 =
" + c );
▸} }
Java Lab 3-продължение
▸Резултат:
▸a & b = 12 ;
▸a | b = 61;
▸ a ^ b = 49;
▸ ~a = -61;
▸ a << 2 = 240;
▸a >> 15 ;
▸a >>> 15
▸Пример 4.Оператор XOR in Java
▸class BitwiseXOR
▸{ public static void main(String args[]){ int num1 = 42; int num2
= 15; System.out.println("XOR Result =" +(num1 ^ num2)); } }
▸//answer: XOR Result = 37
Лекция 8.Цикли в Java
Съществуват следните три оператора за цикъл в Java
1. Оператор за цикъл –”for”.Запис на оператора:
for (initialization; termination; increment)
▸ { statement(s) };
class ForDemo
{ public static void main(String[] args)
{ for(int i=1; i<11; i++)
{ System.out.println("Count is: " + i);
} } }
▸Пример 1.
class EnhancedForDemo { public static void main(String[] args){
int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) {
System.out.println("Count is: " + item);
} } }
Цикли в Java- продължение
2.Оператор за цикъл – „while”.Запис на оператора.
while (expression) { statement(s) }
Пример 2.
class WhileDemo
{ public static void main(String[] args){ int count = 1; while (count
< 11) { System.out.println("Count is: " + count); count++; } }
}
Пример 3.
class WhileDemo
{ public static void main(String[] args){ int count = 1;
while (count < 11)
{ System.out.println("Count is: " + count); count++; }
} }
Цикли в Java- продължение
▸3.Оператор за цикъл-”do- while”.Запис на оператора.
▸do { statement(s) } while (expression);
▸Пример 4.
class DoWhileDemo
{ public static void main(String[] args){ int count = 1;
do { System.out.println("Count is: " + count); count++; }
while (count < 11);
} }
Основната разлика между “while” и “do-while” e, че при “do-
while” условието за край на цикъла се проверява накрая на
цикъла.
10.Лабораторно упражнение 4.
Java Lab 4.
▸Цикли в Java.Примери.
Пример 1.Оператор –”for”
class ForDemo
{ public static void main(String[] args)
{ for(int i=1; i<11; i++)
{ System.out.println("Count is: " + i);
}
} }
Резултат:
Count is: 1 Count is: 2 Count is: 3 Count is: 4 Count is: 5 Count is: 6
Count is: 7 Count is: 8 Count is: 9 Count is: 10
Java Lab 4- продължение
Пример 2.Вграден оператор –”for”.
class EnhancedForDemo
{ public static void main(String[] args){ int[] numbers =
{1,2,3,4,5,6,7,8,9,10};
for (int item : numbers) { System.out.println("Count is: " + item);
} } }
Резултат:
Count is: 1 Count is: 2 Count is: 3 Count is: 4 Count is: 5 Count is: 6
Count is: 7 Count is: 8 Count is: 9 Count is: 10
Java Lab 4- продължение
Оператор за прекъсване-”break”.Пример 3.
class BreakDemo
{ public static void main(String[] args)
{ int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };
int searchfor = 12; int i; boolean foundIt = false;
for (i = 0; i < arrayOfInts.length; i++)
{ if (arrayOfInts[i] == searchfor) { foundIt = true; break; } }
if (foundIt) { System.out.println("Found " + searchfor + " at index "
+ i); } else { System.out.println(searchfor + " not in the array"); }
} }
Java Lab 4- продължение
Оператор за прескачане на итерация-”continue”.
Пример4
class ContinueDemo
{ public static void main(String[] args) { String searchMe = "peter
piper picked a " + "peck of pickled peppers";
int max = searchMe.length(); int numPs = 0;
for (int i = 0; i < max; i++) { // interested only in p's if
(searchMe.charAt(i) != 'p') continue; // process p's numPs++; }
System.out.println("Found " + numPs + " p's in the string.");
} }
Java Lab 4- продължение
Оператор за прескачане на итерация-”continue” с
етикет.
Пример5
class ContinueWithLabelDemo
{ public static void main(String[] args) { String searchMe = "Look
for a substring in me"; String substring = "sub"; boolean foundIt =
false; int max = searchMe.length() - substring.length(); test: for
(int i = 0; i <= max; i++) { int n = substring.length(); int j = i; int k =
0;
while (n-- != 0) { if (searchMe.charAt(j++) !=
substring.charAt(k++)) { continue test; } }
foundIt = true; break test; }
System.out.println (foundIt ? "Found it" : "Didn't find it");
} }
Java Lab 4- продължение
public class DoWhileExample {
public static void main(String[] args) {
int i =0;
do
{
System.out.println("i is : " + i);
i++;
}while(i < 5);
}
}
Java Lab 4- продължение
Пример:
public class Test { public static void main(String args[])
{ int [] numbers = {10, 20, 30, 40, 50};
for(int x : numbers )
{ System.out.print( x );
System.out.print(","); }
System.out.print("n"); String [] names ={"James", "Larry", "Tom",
"Lacy"}; for( String name : names )
{ System.out.print( name ); System.out.print(",");
}
} }
Лекция 11. Масиви
Масивите са неизменна част от езиците за програмиране.
Те представляват съвкупности от променливи, които
наричаме елементи: {0 ,40, 1, 2, 3, 4}
Array elementsArray Array of 5 ;
indexElement ; indexindexElement an arrayElement ;Element of
array; an array
▸Елементите на масивите са номерирани с числата 0, 1, 2,
... N-1. Тези номера на елементи се наричат индекси. Броят
елементи в даден масив се нарича дължина на масива.
▸Всички елементи на даден масив са от един и същи тип,
независимо дали е примитивен или референтен. Това ни
помага да представим група от еднородни елементи като
подредена свързана последователност и да ги обработваме
като едно цяло.
Масиви-продължение
Масивите могат да бъдат от различни размерности, като най-
често използвани са едномерните и двумерните масиви.
Едномерните масиви се наричат още вектори (vectors), а
двумерните матрици (matrix).
▸В Java масивите имат фиксирана дължина, която се указва
при инициа-лизирането му и определя броя на елементите
му. След като веднъж сме задали дължината на масив не е
възможно да я променяме.
▸Деклариране на масив
▸Масиви в Java декларираме по следния начин: int[]
myArray;
Масиви-продължение
В Java масив се създава с ключовата дума new, която служи
за заделяне (алокиране) на памет:
int[ ] myArray = new int[6];
В примера заделяме масив с размер 6 елемента от
целочислен тип. Това означава, че в динамичната памет
(heap) се заделя участък от 6 последователни цели числа.
Елементите на масивите винаги се съхраняват в динамичната
памет (в т. нар. heap).
При заделянето на масив в квадратните скоби задаваме броя
на елементите му (цяло неотрицателно число) и така се
фиксира неговата дължина. Типът на елементите се записва
след new, за да се укаже за какви точно елементи трябва да
се задели памет. Масив с вече зададена дължина не може да
се промени т.е. масивите са с фиксирана дължина.
Масиви-продължение
Инициализация на масив.
▸Преди да използваме елемент от даден масив той трябва
да има начална стойност. В някои езици за програмиране не
се задават начални стойности по подразбиране, и тогава при
опит за достъпване да даден елемент възниква грешка. В
Java всички променливи, включително и елементите на
масивите имат начална стойност по подразбиране (default
initial value). Тази стройност е равна на 0 при числените
типове или неин еквивалент при нечислени типове
(например null за обекти и false за булевия тип).
Начални стойности можем да задаване и изрично. Това
може да стане по различни начини. Един възможен е чрез
използване на литерален израз за елементите на масива
(array literal expression): int[] myArray = {1, 2, 3, 4, 5, 6};
Лабораторно упражнение 5.
Java Lab 5
Пример1. Създавяне на масив от цели числа.
Масив се декларира посредством средни скоби ([ ]) след типа
на елементите или името на масива!!!
class ArrayDemo { public static void main(String[] args)
{ // declares an array of integers int[] anArray;
// allocates memory for 10 integers anArray = new int[10];
// initialize first element anArray[0] = 100;
// initialize second element anArray[1] = 200;
// and so forth anArray[2] = 300; anArray[3] = 400; anArray[4] =
500;
anArray[5] = 600; anArray[6] = 700; anArray[7] = 800; anArray[8] =
900; anArray[9] = 1000;
Java Lab 5.Продължение
Пример 1.Продължение.
System.out.println("Element at index 0: " + anArray[0]);
System.out.println("Element at index 1: " + anArray[1]);
System.out.println("Element at index 2: " + anArray[2]);
System.out.println("Element at index 3: " + anArray[3]);
System.out.println("Element at index 4: " + anArray[4]);
System.out.println("Element at index 5: " + anArray[5]);
System.out.println("Element at index 6: " + anArray[6]);
System.out.println("Element at index 7: " + anArray[7]);
System.out.println("Element at index 8: " + anArray[8]);
System.out.println("Element at index 9: " + anArray[9]);
} }
Java Lab 5.Продължение
Резултат:
Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000
Java Lab 5.Продължение
Пример 2.Създаване и инициализация на масив.
Масивите са обекти и се създават с оператора ‘new’ в
динамичната памет (heap).Първият елемент на масива е
винаги с индекс нула !!
anArray = new int[10];
anArray[0] = 100;
// initialize first element
anArray[1] = 200;
// initialize second element
anArray[2] = 300;
// and so forth
//printing elements of array:
System.out.println("Element 1 at index 0: " + anArray[0]);
System.out.println("Element 2 at index 1: " + anArray[1]);
System.out.println("Element 3 at index 2: " + anArray[2]);
Java Lab 5.Продължение
Запомнете: Размерността на масива се определя по време
на изпълнението на програмата на Java,а не при неговото
деклариране.Размерността може да се зададе и с
константа!
Пример 3.
float[ ] arr1;
arr1= new float[100];
//array of 100 elements real numbers;
int size=1024*768;
// size of array
int rst;
rst=new int[size];
// size of array is defined with const - size
Java Lab 5.Продължение
В Java е възможно да дефинирате многодименсионални масиви.Те
се задават с определен брой ъглови скоби след името или типът
на елементите на масива:
Пример 4.
//two-dimensional array with numbering each element
int twoD[ ][ ] = new int[4][5];
class TwoDArray {
public static void main(String args[]) {
int twoD[][]= new int[4][5];
int i, j, k = 0;
for(i=0; i<4; i++)
for(j=0; j<5; j++) {
twoD[i][j] = k;
k++; }
Java Lab 5.Продължение
Пример 4. Продължение
for(i=0; i<4; i++) {
for(j=0; j<5; j++)
System.out.print(twoD[i][j] + " ");
System.out.println();
}
} } //end of program
Резултат:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
Java Lab 5.Продължение
Пример 5.
Масив при който втората размерност се задава от
програмиста по време на изпълнение на програмата:
class TwoDAgain {
public static void main(String args[]) {
int twoD[][] = new int[4][];
twoD[0] = new int[1];
twoD[1] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
int i, j, k = 0;
for(i=0; i<4; i++)
for(j=0; j<i+1; j++) {
twoD[i][j] = k; k++; }
Java Lab 5.Продължение
Пример 5.Продължение
for (i=0; i<4; i++)
{
for(j=0; j<i+1; j++)
System.out.print(twoD[i][j] + " ");
System.out.println();
} } }
Резултат:
0
1 2
3 4 5
6 7 8 9
Лекция 13. Въведение в обектно-
ориентираното програмиране.
Обекти – част 1.
▸В настоящата лекция ще се запознаем накратко с
основните понятия в обектно-ориентираното програмиране –
класовете и обектите (class, object)– и ще обясним как да
използваме класовете от стандартните библиотеки на Java.
Ще се спрем на някои често използвани системни класове и
ще видим как се създават и използват техни инстанции
(обекти). Ще разгледаме как можем да осъществяваме
достъп до полетата на даден обект, как да извикваме
конструктори и как да работим със статичните полета в
класовете.
Накрая ще се запознаем и какво представляват пакетите
(package) в езика Java.
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Понятие за класове и обекти
Класовете са описание (модел) на реални предмети или
явления, наречени същности (entities). Например класът
"Студент".
▸Класовете имат характеристики – в програмирането са
наречени свойства (properties). Например съвкупност от
оценки. Класовете имат и поведение – в програмирането са
наречени методи (methods). Например явяване на изпит.
▸Методите и свойствата могат да бъдат видими и невидими –
от това зависи дали всеки може да ги използва или са само за
вътрешна употреба в рамките на класа.
▸Обектите (objects) са екземпляри (инстанции) на класовете.
Например Иван е Студент, Петър също е студент.
Въведение в обектно-ориентираното
програмиране(ООП).Обекти.
Продължение
Обектно-ориентираното програмиране е наследник на
процедурното (структурно) програмиране. Процедурното
програмиране най-общо казано описва програмите чрез група от
преизползваеми парчета код (процедури), които дефинират
входни и изходни параметри. Процедурните програми
представляват съвкупност от процедури, които се извикват една
друга. Проблемът при процедурното програмиране е, че
преизползваемостта на кода е трудно постижима и ограничена –
само процедурите могат да се преизползват, а те трудно могат
да бъдат направени общи и гъвкави. Няма лесен начин да се
реализират абстрактни структури от данни, които имат различни
имплементации. Обектно-ориентираният подход залага на
парадигмата, че всяка програма работи с данни, описващи
същности (предмети и явления) от реалния живот.
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Примери за обекти от реалния свят:
Например една счетоводна програма работи с фактури,
стоки, складове, наличности, продажби и т.н.
По този начин се дефинират обектите в счетоводството.
Компютърните програми за обработка данните на персонала
на фирма,студентите в университет или учениците в
колеж работят също с обекти:конкретни служители,студенти
или ученици и техните характеристики (свойства). С тази
технология в програмирането се описват характеристиките
(свойства) и поведението (методи) на тези предмети или
явления от реалния живот.
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Основни принципи на ООП
За да бъде един програмен език обектно-ориентиран, той трябва
не само да позволява работа с класове и обекти, но и трябва да
дава възможност за имплементирането и използването на
принципите и концепциите на ООП: наследяване, абстракция,
капсулация и полиморфизъм.Ще разгледаме в детайли всеки от
тези основни принципи на ООП.
- Наследяване (Inheritance)
( йерархиите от класове подобряват четимостта на кода и
позволяват преизползване на функционалност);
▸ Абстракция (Abstraction)
( виждаме един обект само от гледната точка, която ни
интересува, и да игнорираме всички останали детайли);
- Капсулация (Encapsulation)
(скриваме ненужните детайли в нашите класове и да
предоставяме прост и ясен интерфейс за работа с тях);
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
- Полиморфизъм (Polymorphism)
( работим по еднакъв начин с различни обекти, които
дефинират специфична имплементация на някакво
абстрактно поведение на обекта);
Наследяване (Inheritance):
Наследяването е основен принцип от обектно-
ориентираното програмиране. То позволява на един клас да
"наследява" (поведение и характеристики) от друг, по-общ
клас. Например лъвът е от семейство котки. Всички котки
имат четири лапи, хищници са, преследват жертвите си. Тази
функционалност може да се напише веднъж в клас Котка и
всички хищници да я преизползват – тигър, пума, рис и т.н.
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Пример за дефиниция на клас:
public class Puppy
{ public Puppy(String name)
{ // This constructor has one parameter, name.
System.out.println("Passed Name is :" + name ); }
public static void main(String []args)
{ // Following statement would create an object myPuppy Puppy
myPuppy = new Puppy( "tommy" );
} }
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Капсулация (Encapsulation)
▸Капсулацията се извършва с помоща на ключовите
думи public, protected, private със съответното ограничение
за достъп до полетата или методите на класa.
Обекти от реалния свят
В обектите от реалния свят (също и в абстрактните обекти)
могат да се отделят следните две групи характеристики:
- Състояния (states) – това са характеристики на обекта,
които по някакъв начин го определят и описват по принцип
или в конкретен момент.
- Поведения (behaviors) – това са специфични характерни
действия, които обектът може да извършва.
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Елементи на класа в програмата на java
Основните елементи на класа са следните:
- Декларация на класа (class declaration) – това е редът, на
който декларираме името на класа;
- Тяло на клас – по подобие на методите, класовете също
имат част, която следва декларацията им, оградена с
фигурни скоби – "{" и "}", между които се намира
съдържанието на класа. Тя се нарича тяло на
класа.Пример:
public class Dog {
// ... Here the class body comes ...
}
- Конструктор (constructor) – това е псевдометод, който
се използва за създаване на нови обекти. Така изглежда
един конструктор:
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
public Dog() {
// ... Some code ...
}
Полета (fields) – полетата са променливи (някъде в
литературата се срещат като член-променливи),
декларирани в класа. В тях се пазят данни, които отразяват
състоянието на обекта и са нужни за работата на методите
на класа. Стойността, която се пази в полетата, отразява
конкретното състояние на дадения обект, но съществуват и
такива полета, наречени статични, които са общи за всички
обекти.
▸// Field/Property-storage definition
▸private String name;
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
Свойства (properties) – наричаме характерните особености на
даден клас. Обикновено стойността на тези характеристики се
пази в полета. Подобно на полетата, свойствата могат да бъдат
притежавани само от конкретен обект, или да са споделени
между всички обекти от тип даден клас.
// Field/Property-storage definition
private String name;
Методи (methods) – методите са мястото в класа, където се
описва поведението на обектите от този тип. В методите се
изпълняват алгоритмите и се обработват данните на обекта.
Като пример ще дефинираме клас “Cat”, който съдържа
следните елементи, описани по-горе:
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
▸public class Cat {
▸// Field name
▸private String name; // Field color
▸private String color; //Field name
▸ // Default constructor
▸public Cat() {
▸this.name = "Unnamed";
▸this.color = "gray";
▸} // Constructor with parameters name,color
▸public Cat(String name, String color) {
▸this.name = name;
▸this.color = color;
▸}
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
// Getter of property name
▸public String getName()
▸{return this.name;
▸}
▸// Setter of property name
▸public void setName(String name)
▸{this.name = name;
▸}
▸// Getter of property color
▸public String getColor() {
▸return this.color;
▸}
▸// Setter of property color
▸public void setColor(String color) {
▸this.color = color;
▸} }
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
▸// Method sayMiau
▸public void sayMiau() {
▸System.out.printf("Cat %s said: Miauuuuuu!%n", name);
▸} }
Извикването на метода System.out.printf(…) на класа
java.lang.System е пример за употребата на системен
клас в Java. Системни наричаме класовете, дефинирани
в стандартните библиотеки за изграждане на
приложения с Java (или друг език за програмиране). Те
могат да се използват във всички наши приложения на
Java. Такива са например класовете String, System и
Math, които ще разгледаме малко по-късно.
▸Важно е да се знае, че имплементацията на класовете е
капсулирана (скрита).
Въведение в обектно-ориентираното
програмиране.Обекти.Продължение
▸При използването на методите на даден клас от
приложния програмист, тяхната имплементация е
независима от употребата им. При системни класове
имплементация обикновено дори не е достъпна за
програмиста, който ги използва. Това е така, защото за
програмиста е от значение какво правят методите, а не
как го правят. По този начин се създават нива на
абстракция, което е един от основните принципи в ООП.
Лекция 14. Обекти- част 2.Класове.
Създаване и освобождаване на обекти
Създаването на обекти от предварително дефинирани
класове по време на изпълнението на програмата става
чрез оператора new. Новосъздаденият обект обикновено
се присвоява на променлива от тип, съвпадащ с класа на
обекта. Ще отбележим, че при това присвояване
същинският обект не се копира. В променливата се
записва само референция към новосъздадения обект
(неговият адрес в паметта). Следва прост пример как става
това:
Cat someCat = new Cat();
На променливата someCat от тип Cat присвояваме
новосъздадена инстанция на класа Cat. Променливата
someCat стои в стека, а нейната стойност (инстанцията на
класа Cat) стои в динамичната памет:
Обекти- част
2.Класове.Продължение
На фигурата е показано разположението на
стековата и динамичната памет в оперативната
памет на компютъра.
Stack е статична памет,която съдържа адреси на обекти,
докато динамичната памет се означава като heap и
съдържа стойностите на самите обекти.
Обекти- част 2.Класове.
Създаване на обекти със задаване на параметри
Сега ще разгледаме леко променен вариант на горния
пример, при който задаваме параметри при създаването
на обекта:
Cat myBrownCat = new Cat("Johnny", "brown");
В този пример инициализиращите параметри са всъщност
параметри на конструктора на класа.
Понеже член-променливите name и color на класа Cat са
от референтен тип (от класа String), те се записват също в
динамичната памет (heap) и в самия обект стоят техните
референции (адреси).
Обекти- част 2.Класове.Продължение
Обекти- част 2.Класове.
Продължение
Освобождаване на обектите
Важна особеност на работата с обекти в Java e, че
обикновено няма нужда от ръчното им разрушаване и
освобождаване на паметта, заета от тях. Това е възможно
поради наличието на garbage collector във виртуалната
машина, който се грижи за това вместо нас. Обектите, към
които в даден момент вече няма референция в програмата
автоматично се унищожават и паметта, която заемат се
освобождава. По този начин се предотвратяват много
потенциални бъгове и проблеми. Ако искаме ръчно да
освободим даден обект, трябва да унищожим референция
към него, например така:
myBrownCat = null;
Лабораторно упражнение 6.
Java Lab 6
▸Пример 1.Дефиниране на класове, обекти и
конструктори на обекти в Java.
▸class Language { String name; Language()
▸{ System.out.println("Constructor method called."); }
▸Language(String t) { name = t; }
▸ public static void main(String[] args) { Language cpp = new
Language(); Language java = new
Language("Java"); cpp.setName("C++"); java.getName();
cpp.getName(); } void setName(String t) { name = t; } void
getName()
{ System.out.println("Language name: " + name);
} }

More Related Content

What's hot

Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScript
zand3rs
 
OOPs in Java
OOPs in JavaOOPs in Java
OOPs in Java
Ranjith Sekar
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
Alessandro Forte
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
Forziatech
 
Java Basic Oops Concept
Java Basic Oops ConceptJava Basic Oops Concept
Java Basic Oops Concept
atozknowledge .com
 
Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)
Michelle Anne Meralpis
 
Java - Exception Handling
Java - Exception HandlingJava - Exception Handling
Java - Exception Handling
Prabhdeep Singh
 
Std 12 computer chapter 6 object oriented concepts (part 1)
Std 12 computer chapter 6 object oriented concepts (part 1)Std 12 computer chapter 6 object oriented concepts (part 1)
Std 12 computer chapter 6 object oriented concepts (part 1)
Nuzhat Memon
 
Custom JSF components
Custom JSF componentsCustom JSF components
Custom JSF components
'Farouk' 'BEN GHARSSALLAH'
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
sureshraj43
 
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaWhat Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
Edureka!
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examples
Federico Damián Lozada Mosto
 
.Net Core
.Net Core.Net Core
.Net Core
Bertrand Le Roy
 
C sharp
C sharpC sharp
C sharp
sanjay joshi
 
Object Oriented Concept
Object Oriented ConceptObject Oriented Concept
Object Oriented Concept
D Nayanathara
 
Java programming course for beginners
Java programming course for beginnersJava programming course for beginners
Java programming course for beginners
Eduonix Learning Solutions
 
Object Oriented Programming Principles
Object Oriented Programming PrinciplesObject Oriented Programming Principles
Object Oriented Programming Principles
Andrew Ferlitsch
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
Andre Teixeira Lopes
 
C sharp
C sharpC sharp
C sharp
Satish Verma
 
1 java introduction
1 java introduction1 java introduction
1 java introduction
abdullah al mahamud rosi
 

What's hot (20)

Object Oriented Programming in JavaScript
Object Oriented Programming in JavaScriptObject Oriented Programming in JavaScript
Object Oriented Programming in JavaScript
 
OOPs in Java
OOPs in JavaOOPs in Java
OOPs in Java
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Java Basic Oops Concept
Java Basic Oops ConceptJava Basic Oops Concept
Java Basic Oops Concept
 
Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)Basic Concepts of OOPs (Object Oriented Programming in Java)
Basic Concepts of OOPs (Object Oriented Programming in Java)
 
Java - Exception Handling
Java - Exception HandlingJava - Exception Handling
Java - Exception Handling
 
Std 12 computer chapter 6 object oriented concepts (part 1)
Std 12 computer chapter 6 object oriented concepts (part 1)Std 12 computer chapter 6 object oriented concepts (part 1)
Std 12 computer chapter 6 object oriented concepts (part 1)
 
Custom JSF components
Custom JSF componentsCustom JSF components
Custom JSF components
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
 
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaWhat Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
 
Solid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examplesSolid Principles & Design patterns with PHP examples
Solid Principles & Design patterns with PHP examples
 
.Net Core
.Net Core.Net Core
.Net Core
 
C sharp
C sharpC sharp
C sharp
 
Object Oriented Concept
Object Oriented ConceptObject Oriented Concept
Object Oriented Concept
 
Java programming course for beginners
Java programming course for beginnersJava programming course for beginners
Java programming course for beginners
 
Object Oriented Programming Principles
Object Oriented Programming PrinciplesObject Oriented Programming Principles
Object Oriented Programming Principles
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
C sharp
C sharpC sharp
C sharp
 
1 java introduction
1 java introduction1 java introduction
1 java introduction
 

Similar to Java kurs

Programming with Java Intro
Programming with Java IntroProgramming with Java Intro
Programming with Java Intro
LogMan Graduate School on Knowledge Economy
 
M7: 1.The Java Platform
M7: 1.The Java PlatformM7: 1.The Java Platform
M7: 1.The Java Platform
Bozhidar Batsov
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
DAVID Academy
 
Eclipse Overview@TUES
Eclipse Overview@TUESEclipse Overview@TUES
Eclipse Overview@TUES
Kiril Mitov
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
DAVID Academy
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
DAVID Academy
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. guidnaidenowa
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. guidnaidenowa
 
Svetlin Nakov - E-Business And NASD Academy
Svetlin Nakov - E-Business And NASD AcademySvetlin Nakov - E-Business And NASD Academy
Svetlin Nakov - E-Business And NASD AcademySvetlin Nakov
 
Svetlin Nakov - Programming for .NET Framework Book, Volume 2
Svetlin Nakov - Programming for .NET Framework Book, Volume 2Svetlin Nakov - Programming for .NET Framework Book, Volume 2
Svetlin Nakov - Programming for .NET Framework Book, Volume 2
Svetlin Nakov
 
Как се става програмист?
Как се става програмист?Как се става програмист?
Как се става програмист?
Svetlin Nakov
 
Програмирането със C sharp
Програмирането със C sharpПрограмирането със C sharp
Програмирането със C sharp
Julian Sapoundjiev
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality CodeSvetlin Nakov
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code IntroductionSvetlin Nakov
 
J-Unit тестове
J-Unit тестовеJ-Unit тестове
J-Unit тестове
Georgi Mirchev
 
JavaScript навсякъде
JavaScript навсякъдеJavaScript навсякъде
JavaScript навсякъде
Stoyan Stefanov
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesSvetlin Nakov
 
Huseyin Ozbilen 41б_ 356291
Huseyin Ozbilen  41б_ 356291Huseyin Ozbilen  41б_ 356291
Huseyin Ozbilen 41б_ 356291yoska
 

Similar to Java kurs (20)

Programming with Java Intro
Programming with Java IntroProgramming with Java Intro
Programming with Java Intro
 
M7: 1.The Java Platform
M7: 1.The Java PlatformM7: 1.The Java Platform
M7: 1.The Java Platform
 
Programirane i organizaciq
Programirane i organizaciqProgramirane i organizaciq
Programirane i organizaciq
 
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
Курс по програмиране за напреднали (2012) - 1. Обектно-ориентирано програмира...
 
Eclipse Overview@TUES
Eclipse Overview@TUESEclipse Overview@TUES
Eclipse Overview@TUES
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui
 
Svetlin Nakov - E-Business And NASD Academy
Svetlin Nakov - E-Business And NASD AcademySvetlin Nakov - E-Business And NASD Academy
Svetlin Nakov - E-Business And NASD Academy
 
Svetlin Nakov - Programming for .NET Framework Book, Volume 2
Svetlin Nakov - Programming for .NET Framework Book, Volume 2Svetlin Nakov - Programming for .NET Framework Book, Volume 2
Svetlin Nakov - Programming for .NET Framework Book, Volume 2
 
Как се става програмист?
Как се става програмист?Как се става програмист?
Как се става програмист?
 
Програмирането със C sharp
Програмирането със C sharpПрограмирането със C sharp
Програмирането със C sharp
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
J-Unit тестове
J-Unit тестовеJ-Unit тестове
J-Unit тестове
 
JavaScript навсякъде
JavaScript навсякъдеJavaScript навсякъде
JavaScript навсякъде
 
JBuilder 4.0 - New Features
JBuilder 4.0 - New FeaturesJBuilder 4.0 - New Features
JBuilder 4.0 - New Features
 
Huseyin Ozbilen 41б_ 356291
Huseyin Ozbilen  41б_ 356291Huseyin Ozbilen  41б_ 356291
Huseyin Ozbilen 41б_ 356291
 

More from RaynaITSTEP

Project management professional
Project management professionalProject management professional
Project management professional
RaynaITSTEP
 
Project management it step
Project management it stepProject management it step
Project management it step
RaynaITSTEP
 
Lean startup
Lean startupLean startup
Lean startup
RaynaITSTEP
 
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
RaynaITSTEP
 
DBT_3
DBT_3DBT_3
DBT_2
DBT_2DBT_2
DBT_1
DBT_1DBT_1
monitoring and diagnostics
monitoring and diagnosticsmonitoring and diagnostics
monitoring and diagnostics
RaynaITSTEP
 
network security
network securitynetwork security
network security
RaynaITSTEP
 
networking
networkingnetworking
networking
RaynaITSTEP
 
data security
data securitydata security
data security
RaynaITSTEP
 
configuring disk sand drivers
configuring disk sand driversconfiguring disk sand drivers
configuring disk sand drivers
RaynaITSTEP
 
boot process
boot process  boot process
boot process
RaynaITSTEP
 
install update and migration to windows 10
install update and migration to windows 10install update and migration to windows 10
install update and migration to windows 10
RaynaITSTEP
 
virtualization
virtualizationvirtualization
virtualization
RaynaITSTEP
 
Фотошоп за деца_4
Фотошоп за деца_4Фотошоп за деца_4
Фотошоп за деца_4
RaynaITSTEP
 
Структурни кабелни системи
Структурни кабелни системиСтруктурни кабелни системи
Структурни кабелни системи
RaynaITSTEP
 
Android introduction
Android introductionAndroid introduction
Android introduction
RaynaITSTEP
 
Adobe Illustrator - Урок 2
Adobe Illustrator - Урок 2Adobe Illustrator - Урок 2
Adobe Illustrator - Урок 2
RaynaITSTEP
 
Adobe Illustrator - Обобщение
Adobe Illustrator - ОбобщениеAdobe Illustrator - Обобщение
Adobe Illustrator - Обобщение
RaynaITSTEP
 

More from RaynaITSTEP (20)

Project management professional
Project management professionalProject management professional
Project management professional
 
Project management it step
Project management it stepProject management it step
Project management it step
 
Lean startup
Lean startupLean startup
Lean startup
 
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
РАБОТА С ОБЕКТА „ЗАЯВКА“ (2)
 
DBT_3
DBT_3DBT_3
DBT_3
 
DBT_2
DBT_2DBT_2
DBT_2
 
DBT_1
DBT_1DBT_1
DBT_1
 
monitoring and diagnostics
monitoring and diagnosticsmonitoring and diagnostics
monitoring and diagnostics
 
network security
network securitynetwork security
network security
 
networking
networkingnetworking
networking
 
data security
data securitydata security
data security
 
configuring disk sand drivers
configuring disk sand driversconfiguring disk sand drivers
configuring disk sand drivers
 
boot process
boot process  boot process
boot process
 
install update and migration to windows 10
install update and migration to windows 10install update and migration to windows 10
install update and migration to windows 10
 
virtualization
virtualizationvirtualization
virtualization
 
Фотошоп за деца_4
Фотошоп за деца_4Фотошоп за деца_4
Фотошоп за деца_4
 
Структурни кабелни системи
Структурни кабелни системиСтруктурни кабелни системи
Структурни кабелни системи
 
Android introduction
Android introductionAndroid introduction
Android introduction
 
Adobe Illustrator - Урок 2
Adobe Illustrator - Урок 2Adobe Illustrator - Урок 2
Adobe Illustrator - Урок 2
 
Adobe Illustrator - Обобщение
Adobe Illustrator - ОбобщениеAdobe Illustrator - Обобщение
Adobe Illustrator - Обобщение
 

Java kurs

  • 2. Лекция 1.Въведение в програмирането,въведение в Java синтаксис ▸В този раздел ще се запознаем с основните принципи на програмирането на ЕИМ и граматиката (синтаксиса) на езика java.
  • 3. Начални познания за програмирането на съвременните компютри ▸Същността на програмирането е да се управлява работата на компютъра и всички негови модули; ▸Управлението става с помощта на оператори (команди) от програмиста към компютъра; ▸Програмистите са хората, които кодират командите на определен програмен език; ▸ Всеки език е ориентиран към някое ниво на управление на компютъра; ▸Някои езици са ориентирани към машинното ниво – например асемблер, други са ориентирани към системното ниво, например C. А други езици към високо ниво, ориентирани към писането на приложни програми. Такива са езиците Java, C++, C#, Visual Basic, Python, Ruby, PHP и др.
  • 4. Начални познания за програмирането на съвременните компютри Както ще видите в курса разработката на софтуер не е само програмиране; Разработването на софтуер включва много други процеси като анализ на изискванията, проектиране, планиране, тестване и поддръжка, в които участват не само програмисти, но и много други специалисти; Програмирането представлява малка, макар и много съществена, част от разработката на софтуера; В настоящия курс ще се спрем единствено върху програмирането, което е единственото действие от изброените по-горе, без което не можем да разработваме софтуер.
  • 5. Защо да програмираме на Java ? ▸Java e съвременен език за програмиране и платформа за разработка и изпълнение на софтуерни приложения; ▸На езика Java програмистите могат да кодират кратки програми наречени аплети,които се изпълняват само в средата на браузер (Google Chromе, Internet Explorer, Mozilla) и др.
  • 6. Предимства на езика Java  Java е език от високо ниво, който прилича на C# и C++ и донякъде на езици като Delphi, VB.NET и C. ;  Java е един от най-популярните езици за програмиране. На него пишат милиони разработчици по цял свят ;  Най-големите световни софтуерни корпорации като IBM, Oracle, Google и SAP базират много от своите решения на Java платформата и използват Java като основен език за разработка на своите продукти.
  • 8. Нека да започнем с малко история за езика Java ▸Езикът Java е първоначално разработен и поддържан от Sun Microsystems, но през 2006 г. Java платформата става проект с отворен код ; През 2010 г. Oracle купуват Sun и в момента Java платформата се поддържа и развива от световната Java общност начело с Oracle; От големите софтуерни фирми Java не се ползва единствено от Microsoft и Apple, тъй като те разработват и поддържат собствени платформи, подобни на Java платформата.
  • 9. Още някои важни неща за езика Java ▸Езикът Java се разпространява заедно с платформата Java това е специална среда, върху която се изпълнява Java кодът, наречена Java Runtime Environment (JRE). ▸Тази среда включва Java виртуална машина (JVM) и пакет стандартни библиотеки, предоставящи базова функционалност за Java разработчиците. Благодарение на нея Java програмите са преносими и след като веднъж бъдат написани, след това почти без промени могат да работят на стотици хардуерни платформи и операционни системи като Windows, Linux,Mac OS и др. ▸Именно тази среда прави езика Java независим от използваната хардуерна платформа или операционна система
  • 10. Още някои важни неща за платформата на Java За изпълнението на програми, написани на Java, е необходимо да имате инсталиран Java Runtime Environment (JRE). Това е специален софтуер, част от Java платформата, който съдържа виртуалната машина и стандартните Java библиотеки ; JRE е софтуер, който крайният потребител инсталира еднократно върху компютъра си, за да може да работи с Java; JRE не е стандартна част от Windows и Linux и трябва да се инсталира допълнително ! За разработката на Java приложения е необходимо да имате инсталиран Java Development Kit (JDK). Това е пакет инструменти, с които вие като програмисти можете да пишете Java програми, да ги компилирате и изпълнявате.
  • 11. Eclipse – интегрирана среда за изпълнение на Java програми ▸В практиката се използват следните две интегрирани срдеди за изпълнение на Java програми (IDE): Eclipse , ▸NetBeans. ▸Eclipse (www.eclipse.org) е мощна интегрирана среда за разработка на софтуерни приложения. Eclipse е проект с отворен код и предлага инстру-менти за всички етапи от софтуерния жизнен цикъл. Тук ще разгледаме най-важните функции – тези, свързани със самото програмиране – писането, компилирането, изпълнението и дебъгването на програми.
  • 12. Eclipse – интегрирана среда за изпълнение на Java програми- продължение ▸Структура на визуалния интерфейс на Eclipse. ▸ Основна съставна част са перспективите. Всяка перспектива съдържа един или повече визуализатори (views). Всеки визуализатор реализира различна функция, свързана с улесняване на програмирането. Да разгледаме най-използва- ната перспектива – Java перспективата. Тя съдържа: ▸- Package Explorer – тук могат да се видят всички класове, които съставят текущия проект на програма; ▸- Problems – показва грешките при компилация; ▸- Outline – показва свойствата и поведението (методите) на селектиран Java клас; ▸- Console – показва стандартния изход, когато стартираме програма.
  • 13. Eclipse – интегрирана среда за изпълнение на Java програми-продължение ▸Освен визуализатори в средата на работното пространство стоят редакторите на Java файлове. В Eclipse можем да редактираме едновременно произволен брой файлове. Съществуват още редица визуализатори с помощно предназначение, които няма да разглеждаме тук. Създаване на нов Java проект Преди да направим каквото и да било в Eclipse, трябва да създадем проект за него. Проектът логически групира множество файлове, предназначени да реализират произволна програма. За всяка програма е добре да се създава отделен проект. Проект се създава чрез следване на следните стъпки: ▸- File -> New -> Project; ▸- Избираме "Java Project";
  • 14. Eclipse – интегрирана среда за изпълнение на Java програми-продължение
  • 15. Eclipse – интегрирана среда за изпълнение на Java програми-продължение ▸Новосъздаденият проект се показва в Package Explorer.
  • 16. Запомнете следните важни неща за обучението по Java Нека да се спрем върху основните неща при изучаването на езика Java. За да се научите да програмирате на Java не са необходими начални познания; За да се научите да програмирате на Java не е необходимо да сте учили информационни технологии или компютърни науки, за да четете и разбирате учебния материал в курса; Ако учите университетска специалност, свързана с компютърните технологии или в училище учите информационни технологии, това само ще ви помогне, но не е задължително !
  • 17. Предимства на Java спрямо другите обектно-ориентирани езици като C,C++ C/C++ са платформено зависими езици, което изисква отделни компилатори; В C/C++ се използват указатели с адреси към обекти; За разработване на графични приложения в C/C++ са необходими специални библиотеки ; В C/C++ сьществува множествено наследяване което прави програмите трудно разбираеми ▸Java е платформено независим език; ▸В Java всичко е обект; ▸В Java не се използват указатели с адреси; ▸В Java лесно се вграждат графични обект(Java Swing); ▸В Java няма множествено наследяване, а само интерфейси
  • 18. Да започнем с нашата първа примерна програма на Java ! public class HelloJava { public static void main(String[] arguments) { System.out.println("Hello, Java"); } }
  • 19. Основна структура на програмата на Java ▸Програмата на Java се състои от класове (шаблони) и обекти от тези класове, които са дефинирани в пакетите (packages) в езика Java; ▸Пакетите се включват посредством оператора „import” в началото на програмата на java; ▸Във всеки клас програмистът може да дефинира функции(методи) и променливи (полета) ; ▸ полетата задават обукновено свойствата на обектите от класа, а методите тяхното състояние; ▸В програмата на Java има една главна функция (main) от която започва изпълнението на програмата (входна точка); ▸В програмата на Java трябва да има един „общо достъпен „ клас (public), който има същото име както сорс файла на Java
  • 20. Структура на виртуалната машина на Java Сърцето на програмната среда на Java е нейната виртуална машина!
  • 21. Граматика (синтаксис) на Java ▸Всеки език за програмиране подобно на говоримите езици има граматични правила (синаксис), което важи и за Java: ▸Java се състои от отделни инструкции (команди), които са изградени от ключови думи (keywords) и аритметични или логически оператори като събиране,изваждане, умножение, деление, отри- цание,конюнкция,дизюнкция,несъвпадение и др.; ▸Всяка команда на Java завършва с точка и запетая (semicolon); ▸Отделните класове започват с ключовата дума class и техните елементи са оградени с големи скоби { …..} ▸Ключовите думи заедно с аритметичните и логически оператори образуват аритметични изрази в Java
  • 22. Отделните синтактични единици и тяхното взаимодействие в Java може да се предстви със следната диаграма: Functions (methods) Class in Java Objects of class Variables (fields)
  • 23. Да започнем с изучаването на ключовите думи на езика Java ▸Езикът Java използва следните основни ключови думи:
  • 24. Продължаваме с изучаването на платформата на Java
  • 25. Java platform Standard edition (JSE)
  • 26. Java Platform Enterprice Edition (EE) ▸
  • 27. Java Platform Micro edition (ME)
  • 28. Лекция 2.Променливи в езика Java- глобални, локални, видове променливи ▸В този раздел ще се запознаем с основните видове променливи и константи в Java и тяхното дефиниране и използване, които са основата при кодиране на програмите на Java!
  • 29. Променливи в езика Java ▸Какво представляват променливите в java ? ▸Променливите са адреси на клетки от оперативната памет (RАМ) на PC , в които програмата на потребителя записва стойности от опеределен тип(цели числа , реални числа,символи,низове и др.); ▸Стойностите на променливите се променят по време на изпълнение на програмата! ▸Константите в програмата на java се означават с модификатора final-техните стойности не се променят по време на изпълнение на програмата! ▸Имената на променливите трябва да започват с буква, знак за долар или “_”; ▸Пред името на променливата програмиста трябва да декларира нейния тип (int,float,double,char,string и др.); ▸Програмистът може да зададе и стойност на променливата при нейната декларация!
  • 30. Примери за използване на променливи public class ComputeArea { /** Main method - това е коментар към програмата!! */ public static void main(String[] args) { double radius; //promenliwa ot typ double double area; int i; //promeliwa ot typ integer // Assign a radius radius = 20; final double pi= 3.14159; //constanta pi ot typ double // Compute area area = radius * radius *pi; // Display results System.out.println("The area for the circle of radius " + radius + " is " + area); } }
  • 31. Видове променливи в Java ▸Променливите в Java могат да се разделят на: ▸Локални променливи декларирани в рамките на функция,блок; ▸Обектни (динамични) променливи декларирани в даден клас, които съществуват само по време на съществуване наобекта; ▸Статични променливи, които съществуват по време на изпълнение на цялата програма на Java- те се отбелязват с модификатор “static “; ▸Пример: ▸ static int i=1; static float k=1.5;
  • 32. Променливи в Java ▸Какво трябва да запомните ? ▸Обектните (динамични) променливи съществуват в паметта докато съществува обекта- след това автоматично се изтриват от JVM; ▸Статичните променливи съществуват докато съществува програмата на Java ▸Стойността на статичната променлива се споделя от всички обекти в програмата на Java
  • 33. Типове данни в Java ▸1. Примитивни типове данни • integer 4 bytes • short 2 bytes • long 8 bytes • byte 1 byte • float 4 bytes • double 8 bytes • Char Unicode encoding -2 bytes • boolean {true, false} - 1 byte
  • 34. Синтаксис на програмата на Java ▸Програмата на Java започва с деклариране на използваните пакети от библиотеките на Java (import java.util.*;); ▸В Програмата на Java трябва да се декларират всички класове и методи и променливи в тях; ▸Програмата на Java може да съдържа коментари за един ред - // xxxxxxxxxxxxx ▸Или коментари за няколко реда които се означават с /* xxxxx ▸Xxxxxx */ ▸Програмата на Java трябва да съдържа главен метод /public static void main(String args[]) / в клас public;
  • 35. Видове константи в Java • Числови константи.Примери: 37 integer 37.2 float 42F float 0754 integer (octal) 0xfe integer (hexadecimal) ▸Цялата част се отделя от дробната с точка; ▸Шестнайсетичните константи се записват с ▸‘0x’ в началото
  • 36. Типове данни в Java- продължение ▸Обвиващи типове данни (Wrapper type): ▸Примери: ▸Integer n = new Integer(“4”); ▸int m = n.intValue(); ▸Float f=new Float(“4.25”); ▸Float f2=f.floatValue(); ▸Double d=new Double(“4.55”);
  • 37. Типове данни „референции към обекти“ в езика Java ▸Типове данни „референции към обекти“ представляват променливи, които съдържат адреса (референцията) към конкретен обект в оперативната памет.Обектите в Java биват следните основни видове: • Обекти дефинирани като инстанции на класове или интерфейси (class , interface); • Обекти от типа низ (string); • Обекти от типа масив (array); • Пример: ▸Animal[] arr; // nothing yet … ▸arr = new Animal[4]; // only array of pointers ▸String Booktitle; ▸Booktitle=“Java book”;
  • 38. Обектни типове данни ▸Обектните типове данни са: масиви,низове и типовете данни дефинирани чрез класове или интерфейси: array[],string,class Type { }; ▸Animal[] arr; // nothing yet … ▸arr = new Animal[4]; // only array of pointers ▸for(int i=0 ; i < arr.length ; i++) { ▸ arr[i] = new Animal(); ▸// now we have a complete array ▸}
  • 39. Преобразуване (конвертиране) на типове в Java В Java съществува два типа преобразуване на типове: ▸Преобразуване на примитивни типове данни; ▸Преобразуване на обектни типове данни; ▸1. Преобразуване на примитивни типове данни. ▸Това преобразуване може да бъде неявно(автоматично се извършва от компилатора) или явно (задава се от програмиста); ▸Неявното преобразуване се нарича още преобразуване с разширение, защото компилаторът „разширява“ по-тесния тип на присвояваната променлива към по-широк тип данни.Неявното преобразуване е показано на следната диаграма:
  • 41. Преобразуване (конвертиране) на типове в Java-продължение ▸Друг вид конвертиране на примитивни типове е конвертиране с аритметично увеличаване на типовете.Това преобразуване се извършва от компилаторът при обработката на аритметични изрази. Пример: ▸Short s=9; ▸Int i=10; ▸Float f = 11.1f; ▸Double d=12.34; ▸If (-s*I >=f/d ) System.out.println (“Greater value”); ▸ else ▸ System.out.println (“Less value”); ▸
  • 42. Преобразуване (конвертиране) на типове в Java-продължение ▸При явното преобразуване програмистът указва на Java типът към който се преобразува променливата: ▸Пример: ▸Short s=299; ▸Byte b=(byte) s; ▸System.out.println(“b=“ + b); ▸Int i=2; ▸Double radians; ▸Radians=(double) I;
  • 43. Преобразуване (конвертиране) на типове в Java-продължение ▸Конвертиране на референции към обекти: ▸При този тип конвертиране се използват следните правила: ▸Типът интефейс може да бъде конвертиран само в тип интерфейс или Object; ▸Типът клас може да бъде конвертиран само в тип клас или в тип интерфейс, като старият тип трябва да е подтип на новия; ▸Тип масив може да бъде конвертиран в масив или в клас Object или интерфейси Cloneable,Serializable; ▸Общото правило при конвертиране на референции гласи,че може да бъдат конвертирани обекти от подкласове към надкласове в дървото на йерархията на класовете .На върха на йерархията се намира клас “Object”.
  • 44. Преобразуване (конвертиране) на типове в Java-продължение ▸Диаграмата на преобразуване на режферентни типове е показана по-долу:
  • 45. Преобразуване (конвертиране) на типове в Java-продължение (обобщение) ▸Конвертирането на примитивните типове се извършва при: ▸Конвертиране при присвояване; ▸Конвертиране при извикване на метод; ▸Конвертиране при аритметично увеличаване на типове; ▸Явно преобразуване на типове. ▸Конвертирането на референции към обекти се извършва при: ▸Конвертиране при присвояване; ▸Конвертиране при извикване на метод; ▸Явно преобразуване на типове. ▸Общото правило гласи, че неявното конвертиране е разрешено при „движение“ нагоре по дървото на наследяването.
  • 46. Лекция 3.Операции и аритметични операции в езика Java ▸В този раздел ще разгледаме основните аритметични и логически операции в езика Java и как те се използват.
  • 47. Аритметични операции в Java ▸В Java както и в останалите езици за програмиране съществуват следните пет основни аритметични операции: ▸Събиране (+); ▸Изваждане (-); ▸Умножение (*); ▸Деление (/); ▸Деление по модул(остатъка от делението на две цели числа (%); ▸Оператор за присвояване : (=);
  • 48. Примери за аритметични операции ▸Int i=5; int j=8 ;float k=0.0; double v=1.0, w=2.0; ▸//v,w –are from the same type ▸K=(i*j)/2; ▸V=(5%j)*k; ▸System.out.println(“v=“+v);//console output ▸W=(k-v)/2+(i+j)/4; ▸System.out.println(“w=“+w); //console output ▸Long i=1024;int j=10555,k=0; ▸K=(int)(i*i+j*j)/4; ▸System.out.println(“k=“+k); //console output
  • 49. 4. Лабораторно упражнение 1. Java Lab 1 ▸Примери за използване на основните аритметични и логически операции в Java. ▸Пример 1.Изчисляване площ на кръг. ▸int r = (150-20) / 2 + 5; ▸// Expression for calculation of the surface of the circle ▸double surface = Math.PI * r * r; ▸// Expression for calculation of the perimeter of the circle ▸double perimeter = 2 * Math.PI * r; ▸System.out.println(r); ▸System.out.println(surface); ▸System.out.println(perimeter);
  • 50. Java Lab 1- продължение ▸Резултат: ▸70 ▸15393.804002589986 ▸439.822971502571 ▸Пример 2. ▸Побитови операции в Java ▸int n = 35; // 00100011 ▸int p = 6; ▸int i = 1; // 00000001 ▸int mask = i << p; // Move the 1st bit with p positions ▸// If i & mask are positive then the p-th bit of n is 1 ▸System.out.println((n & mask) != 0 ? 1 : 0);
  • 51. Java Lab 1- продължение ▸Пример 3. ▸Дефиниране на клас с използване на аритметичните операции. ▸В този пример е дефиниран класът “ArithmeticDemo” с основните аритметични операции:събиране (+), ▸изваждане(-), умножение(*) и деление (/), деление по модул (%), както и операторът за присвояване (=). ▸В класа е дефинирана и основната функция public static void main(), която се явява входна точка на програмата на java.
  • 52. Java Lab 1- продължение ▸class ArithmeticDemo ▸ { ▸ public static void main (String[] args) { int result = 1 + 2; // result is now 3 System.out.println("1 + 2 = " + result); int original_result = result; result = result - 1; // result is now 2 System.out.println(original_result + " - 1 = " + result); original_result = result; result = result * 2; // result is now 4 System.out.println(original_result + " * 2 = " + result); o ▸riginal_result = result; result = result / 2; // result is now 2 ▸//source code on the next page
  • 53. Java Lab 1- продължение ▸System.out.println(original_result + " / 2 = " + result); original_result = result; result = result + 8; ▸// result is now 10 ▸ System.out.println(original_result + " + 8 = " + result); ▸original_result = result; ▸result = result % 7; ▸// result is now 3 System.out.println(original_result + " % 7 = " + result); } }
  • 54. Лекция 5.Продължение- операции,методи,параметри,матема- тически функции в Java ▸В този раздел ще се спрем по подробно на основните математически операции, функции и тяхното използване в Java.
  • 55. Логически операции в Java ▸Логическите операции в java са оператори, които се изпълняват върху логически или числови променливи(тип boolean,integer,double) и дават като резултат логическа единица или нула(true, false). Това са операциите: ▸Инвертиране (NOT) или (!); ▸Логическо умножение (AND) или (&&); ▸Логическо сумиране (OR) или (||); ▸Логическо несъвпадение (XOR) или (^). ▸Примери: ▸0 <= x && x <= 9; ▸0<=x || y<=1; ▸If (!x) z=x + y; else z=(x + y)*(x-y); ▸If (x^y) System.out.println(“x differs from y”);else System.out.println(“x is equal y”);
  • 56. Логически операции в Java-примери ▸boolean a = true; ▸boolean b = false; ▸System.out.println(a && b); // false ▸System.out.println(a || b); // true ▸System.out.println(!b); // true ▸System.out.println(b || true); // true ▸System.out.println((5>7) ^ (a==b)); // false Закони на де Морган,които се използват при логическите операции: ▸!(a && b) == (!a || !b) ▸!(a || b) == (!a && !b)
  • 57. Побитови операции в Java ▸Побитовите операции се изпълняват върху двоичния код на конкретна променлива.Това са операциите: ▸Побитово отрицание (bitweise not) – (~); ▸Побитово умножение (bitweise and)-(&); ▸Побитово събиране (bitweise or) - (|); ▸Побитово сравнение (bitweise xor) - (^); ▸Побитово преместване на ляво (shift left) –(<<); ▸Побитово преместване на дясно (shift right) – (>>); ▸Побитово преместване на дясно със запълване с „1“ ▸(>>>);
  • 58. Оператор за слепване на низове(конкатенация) ▸Операторът за слепване на низове (+) съединява два или повече низа последователно, като ако другият оператор не е низ(операция “tostring”) той автоматично се преобразува в низ и може да бъде разпечатан.Примери: ▸String first = "Star"; ▸String second = "Craft"; ▸System.out.println(first + second); // StarCraft ▸String output = first + second + " "; ▸int number = 2; ▸System.out.println(output + number); ▸// StarCraft 2
  • 59. Побитови операции в Java-примери ▸short a = 3; // 0000 0011 = 3 ▸short b = 5; // 0000 0101 = 5 ▸System.out.println( a | b); // 0000 0111 = 7 ▸System.out.println( a & b); // 0000 0001 = 1 ▸System.out.println( a ^ b); // 0000 0110 = 6 ▸System.out.println(~a & b); // 0000 0100 = 4 ▸System.out.println(a << 1); // 0000 0110 = 6 ▸System.out.println(a << 2); // 0000 1100 = 12 ▸System.out.println(a >> 1); // 0000 0001 = 1
  • 60. Примери за аритметични операции в Java ▸Операции инкрементиране и декрементиране-стойността на променливата се увеличава(намалява) с 1: ▸ x++; //x=x+1; y--; //y=y-1; ▸int squarePerimeter = 17; double squareSide = squarePerimeter / 4.0; double squareArea = squareSide * squareSide; ▸System.out.println(squareSide); // 4.25 ▸System.out.println(squareArea); // 18.0625 ▸int a = 5; int b = 4; ▸System.out.println(a + b); // 9 ▸System.out.println(a + b++); // 9 ▸System.out.println(a + b); // 10 ▸System.out.println(a + (++b)); // 11 ▸System.out.println(a + b); // 11 ▸System.out.println(14 / a); // 2 ▸System.out.println(14 % a); // 4
  • 61. Операции за сравнение в Java ▸Операторите за сравнение в Java са шест на брой и сравняват стойностите на две променливи или два аритметични израза: ▸ a>b; ▸ a<b; ▸ a==b; ▸ a>=b; ▸ a<=b; ▸ a!=b; ▸ a+b >a-b; ▸Като резултат от сравнението се получава логическа стойност –true (вярно) или false (невярно).
  • 62. Операции за сравнение в Java- примери ▸Примери за операции за сравнение: ▸public class RelationalOperatorsDemo ▸ { ▸public static void main(String args[]) { ▸int x = 10, y = 5; ▸System.out.println("x > y : " + (x > y)); // true ▸System.out.println("x < y : " + (x < y)); // false ▸System.out.println("x >= y : " + (x >= y)); // true ▸System.out.println("x <= y : " + (x <= y)); // false ▸System.out.println("x == y : " + (x == y)); // false ▸System.out.println("x != y : " + (x != y)); // true ▸} }
  • 63. Оператор за присвояване в Java ▸Операторът за присвояване присвоява стойност (литерал) на променлива или стойност на аритметичен израз на променлива.Този оператор е подобен на оператора (=) в алгебрата. ▸Пример: ▸int x = 6; ▸String helloString = "Здравей стринг."; ▸int y = x; ▸Операторът за присвояване трябва да бъде различаван от оператора за сравнение (==).
  • 64. Оператор за присвояване в Java- примери ▸Каскадно използване на операторът за присвояване.Примери: ▸int x, y, z; ▸x = y = z = 25; ▸ float p,q,r; ▸ p=q=r=55.55; ▸System.out.println (“x=y=z=”+x); ▸System.out.println (“p=q=r=” +p); ▸ double z=Math.sqrt(x+y+z); ▸System.out.println (“z=“ + z); ▸Клас Math e вграден клас в пакета “java.lang.*” и в него са дефинирани основните математически функции като статични методи. ▸import static java.lang.Math.*;
  • 65. 6. Лабораторно упражнение 2. Java Lab 2 ▸Пример 1. ▸int cadence = 0; ▸anArray[0] = 100; //null element of array is 100 ▸System.out.println("Element 1 at index 0: " + anArray[0]); ▸ int result = 1 + 2; // result is now 3 ▸if (value1 == value2) System.out.println("value1 == value2"); ▸//if statement by value1 =value 2;
  • 66. Java Lab 2-продължение ▸Пример 2.Оператор за присвояване, инкрементиране, декрементиране ▸// assignment statement ▸aValue = 8933.234; // increment statement aValue++; // method invocation statement ▸aValue--; // decrement statement ▸System.out.println("Hello World!"); // object creation statement Bicycle ▸ myBike = new Bicycle();
  • 67. Java Lab 2-продължение ▸Пример 3. Блоков оператор { } ▸class BlockDemo ▸{ public static void main(String[] args) ▸{ boolean condition = true; ▸if (condition) { // begin block 1 System.out.println("Condition is true."); } // end block one else ▸ { // begin block 2 ▸ System.out.println("Condition is false."); ▸} // end block 2 } }
  • 68. Java Lab 2-продължение ▸Пример 4. ▸aValue = 8933.234; ▸aValue++; ▸System.out.println("Hello World!"); ▸System.out.println("Hello my friend!"); ▸Bicycle myBike = new Bicycle(); ▸Person Nikolaj=new Person(); ▸Student Ivan = new Student();
  • 69. Java Lab 2-продължение ▸Пример 5.Математически функции в класа Math ▸public static void main(String[] args) { int i = 7; int j = -9; double x = 72.3; double y = 0.34; System.out.println("i is " + i); System.out.println("j is " + j); System.out.println("x is " + x); System.out.println("y is " + y); // The absolute value of a number is equal to // the number if the number is positive or // zero and equal to the negative of the number // if the number is negative. System.out.println("|" + i + "| is " + Math.abs(i)); System.out.println("|" + j + "| is " + Math.abs(j)); System.out.println("|" + x + "| is " + Math.abs(x)); System.out.println("|" + y + "| is " + Math.abs(y)); System.out.println(x + " is approximately " + Math.round(x)); System.out.println(y + " is approximately " + Math.round(y)); // The "ceiling" of a number is the // smallest integer greater than or equal to // the number.
  • 70. Лекция 7.Условни твърдения и оператори.Оператори за сравнение в езика Java.Булева алгебра. ▸Условните твърдения и оператори в java дават възможност на програмиста да извърши разклонение в алгоритъма на програмата по определено логическо условие (твърдение). Те се дефинират с операторите: ▸If ( logical operator) op1 in Java; ▸ else op2 in Java; ▸Пример 1: ▸void applyBrakes() ▸ { // the "if" clause: bicycle must be moving ▸if (isMoving){ // the "then" clause: decrease current speed currentSpeed--; } }
  • 71. Условни твърдения и оператори- продължение ▸Пример 2: ▸void applyBrakes() ▸{ if (isMoving) { currentSpeed--; } ▸ else { System.err.println("The bicycle has already stopped!"); } ▸ } ▸Пример 3: ▸class IfElseDemo ▸{ public static void main(String[] args) { int testscore = 76; char grade; ▸if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade = 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60) { grade = 'D'; } else { grade = 'F'; } System.out.println("Grade = " + grade); } }
  • 72. Оператори за сравнение в Java ▸Операторите за сравнение в Java се използват за сравнение между стойностите на променлива и константа , две променливи , два аритметични израза или две референции към обекти.Резултатът от сравнението е true или false.Операторите са 6 на брой и са показани в таблицата по-долу: ▸Оператор Действие ▸== равно ▸!= различно ▸> по-голямо ▸>= по-голямо или равно ▸< по-малко ▸<= по-малко или равно
  • 73. Оператори за сравнение в Java- продължение ▸Примери: ▸int weight = 700; ▸System.out.println(weight >= 500); ▸char sex = 'm'; ▸System.out.println(sex <= 'f'); ▸double colorWaveLength = 1.630; ▸System.out.println(colorWaveLength > 1.621); ▸Получаваме следния резултат: ▸true ▸false ▸true
  • 74. Оператори за сравнение в Java- продължение ▸Примери за сравнение на числа и символи: ▸System.out.println("char 'a' == 'a'? " + ('a' == 'a')); ▸System.out.println("char 'a' == 'b'? " + ('a' == 'b')); ▸System.out.println("5 != 6? " + (5 != 6)); ▸System.out.println("5.0 == 5L? " + (5.0 == 5L)); ▸System.out.println("true == false? " + (true == false)); ▸Резултат: ▸char 'a' == 'a'? true ▸char 'a' == 'b'? false ▸5 != 6? true ▸5.0 == 5L? true ▸true == false? false
  • 75. Оператори за сравнение в Java- продължение ▸Пример за сравнение за реални числа с точност: ▸float value = 1.0f; ▸float sum = 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + ▸0.1f + 0.1f + 0.1f + 0.1f + 0.1f; ▸System.out.println("Exact compare: " + ▸(sum==value)); ▸System.out.println("Rounded compare: " + ▸(Math.abs(sum-value) < 0.000001)); ▸Резултат: ▸Exact compare: false ▸Rounded compare: true ▸
  • 76. Оператори за сравнение в Java- продължение ▸Примери за сравнение на референции към обекти(низове): ▸String str = "bira"; ▸String anotherStr = str; ▸String bi = "bi"; ▸String ra = "ra"; ▸String thirdStr = bi + ra; ▸System.out.println("str = " + str); ▸System.out.println("anotherStr = " + anotherStr); ▸System.out.println("thirdStr = " + thirdStr); ▸System.out.println(str == anotherStr); ▸System.out.println(str == thirdStr);
  • 77. Оператори за сравнение в Java- продължение ▸Получаваме следния резултат: ▸str = bira ▸anotherStr = bira ▸thirdStr = bira ▸true ▸false ▸От посочения пример следва, че за сравнение на референции на обекти може да се използва оператора (==),но за сравнение на стойности на обекти в случая низов трябва да се използва друг оператор (equals).
  • 78. 8.Лабораторно упражнение 3. Java Lab 3 ▸Пример 1. Оператор “switch” за избор на вариант. ▸public class SwitchDemo ▸ { public static void main(String[] args) { int month = 8; String monthString; switch (month) { case 1: ▸ monthString = "January"; break; case 2: ▸monthString = "February"; break; case 3: monthString = "March"; break; case 4: ▸ monthString = "April"; break; case 5: monthString = "May"; break; case 6: ▸ monthString = "June"; break; case 7: ▸ monthString = "July"; break; case 8: ▸ monthString = "August"; break;
  • 79. Java Lab 3-продължение Пример 1. Оператор “switch”- продължение. case 9: ▸ monthString = "September"; break; ▸case 10: ▸monthString = "October"; break; ▸case 11: ▸monthString = "November"; break; ▸case 12: monthString = "December"; break; ▸default: monthString = "Invalid month"; break; } System.out.println(monthString); ▸ } }
  • 80. Java Lab 3-продължение ▸Пример 2.Побитов оператор “AND” ▸class BitDemo { public static void main(String[] args) { int bitmask = 0x000F; int val = 0x2222; // prints "2" System.out.println(val & bitmask); } } Пример 3.Побитови оператори. public class Test { public static void main(String args[]) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c );
  • 81. Java Lab 3-продължение ▸Пример 3.Побитови оператори-продължение. ▸c = a ^ b; /* 49 = 0011 0001 */ System.out.println("a ^ b = " + c ); c = ~a; /*-61 = 1100 0011 */ System.out.println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ System.out.println("a << 2 = " + c ); ▸c = a >> 2; /* 15 = 1111 */ System.out.println("a >> 2 = " + c ); ▸ c = a >>> 2; /* 15 = 0000 1111 */ System.out.println("a >>> 2 = " + c ); ▸} }
  • 82. Java Lab 3-продължение ▸Резултат: ▸a & b = 12 ; ▸a | b = 61; ▸ a ^ b = 49; ▸ ~a = -61; ▸ a << 2 = 240; ▸a >> 15 ; ▸a >>> 15 ▸Пример 4.Оператор XOR in Java ▸class BitwiseXOR ▸{ public static void main(String args[]){ int num1 = 42; int num2 = 15; System.out.println("XOR Result =" +(num1 ^ num2)); } } ▸//answer: XOR Result = 37
  • 83. Лекция 8.Цикли в Java Съществуват следните три оператора за цикъл в Java 1. Оператор за цикъл –”for”.Запис на оператора: for (initialization; termination; increment) ▸ { statement(s) }; class ForDemo { public static void main(String[] args) { for(int i=1; i<11; i++) { System.out.println("Count is: " + i); } } } ▸Пример 1. class EnhancedForDemo { public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); } } }
  • 84. Цикли в Java- продължение 2.Оператор за цикъл – „while”.Запис на оператора. while (expression) { statement(s) } Пример 2. class WhileDemo { public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } } } Пример 3. class WhileDemo { public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } } }
  • 85. Цикли в Java- продължение ▸3.Оператор за цикъл-”do- while”.Запис на оператора. ▸do { statement(s) } while (expression); ▸Пример 4. class DoWhileDemo { public static void main(String[] args){ int count = 1; do { System.out.println("Count is: " + count); count++; } while (count < 11); } } Основната разлика между “while” и “do-while” e, че при “do- while” условието за край на цикъла се проверява накрая на цикъла.
  • 86. 10.Лабораторно упражнение 4. Java Lab 4. ▸Цикли в Java.Примери. Пример 1.Оператор –”for” class ForDemo { public static void main(String[] args) { for(int i=1; i<11; i++) { System.out.println("Count is: " + i); } } } Резултат: Count is: 1 Count is: 2 Count is: 3 Count is: 4 Count is: 5 Count is: 6 Count is: 7 Count is: 8 Count is: 9 Count is: 10
  • 87. Java Lab 4- продължение Пример 2.Вграден оператор –”for”. class EnhancedForDemo { public static void main(String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { System.out.println("Count is: " + item); } } } Резултат: Count is: 1 Count is: 2 Count is: 3 Count is: 4 Count is: 5 Count is: 6 Count is: 7 Count is: 8 Count is: 9 Count is: 10
  • 88. Java Lab 4- продължение Оператор за прекъсване-”break”.Пример 3. class BreakDemo { public static void main(String[] args) { int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 }; int searchfor = 12; int i; boolean foundIt = false; for (i = 0; i < arrayOfInts.length; i++) { if (arrayOfInts[i] == searchfor) { foundIt = true; break; } } if (foundIt) { System.out.println("Found " + searchfor + " at index " + i); } else { System.out.println(searchfor + " not in the array"); } } }
  • 89. Java Lab 4- продължение Оператор за прескачане на итерация-”continue”. Пример4 class ContinueDemo { public static void main(String[] args) { String searchMe = "peter piper picked a " + "peck of pickled peppers"; int max = searchMe.length(); int numPs = 0; for (int i = 0; i < max; i++) { // interested only in p's if (searchMe.charAt(i) != 'p') continue; // process p's numPs++; } System.out.println("Found " + numPs + " p's in the string."); } }
  • 90. Java Lab 4- продължение Оператор за прескачане на итерация-”continue” с етикет. Пример5 class ContinueWithLabelDemo { public static void main(String[] args) { String searchMe = "Look for a substring in me"; String substring = "sub"; boolean foundIt = false; int max = searchMe.length() - substring.length(); test: for (int i = 0; i <= max; i++) { int n = substring.length(); int j = i; int k = 0; while (n-- != 0) { if (searchMe.charAt(j++) != substring.charAt(k++)) { continue test; } } foundIt = true; break test; } System.out.println (foundIt ? "Found it" : "Didn't find it"); } }
  • 91. Java Lab 4- продължение public class DoWhileExample { public static void main(String[] args) { int i =0; do { System.out.println("i is : " + i); i++; }while(i < 5); } }
  • 92. Java Lab 4- продължение Пример: public class Test { public static void main(String args[]) { int [] numbers = {10, 20, 30, 40, 50}; for(int x : numbers ) { System.out.print( x ); System.out.print(","); } System.out.print("n"); String [] names ={"James", "Larry", "Tom", "Lacy"}; for( String name : names ) { System.out.print( name ); System.out.print(","); } } }
  • 93. Лекция 11. Масиви Масивите са неизменна част от езиците за програмиране. Те представляват съвкупности от променливи, които наричаме елементи: {0 ,40, 1, 2, 3, 4} Array elementsArray Array of 5 ; indexElement ; indexindexElement an arrayElement ;Element of array; an array ▸Елементите на масивите са номерирани с числата 0, 1, 2, ... N-1. Тези номера на елементи се наричат индекси. Броят елементи в даден масив се нарича дължина на масива. ▸Всички елементи на даден масив са от един и същи тип, независимо дали е примитивен или референтен. Това ни помага да представим група от еднородни елементи като подредена свързана последователност и да ги обработваме като едно цяло.
  • 94. Масиви-продължение Масивите могат да бъдат от различни размерности, като най- често използвани са едномерните и двумерните масиви. Едномерните масиви се наричат още вектори (vectors), а двумерните матрици (matrix). ▸В Java масивите имат фиксирана дължина, която се указва при инициа-лизирането му и определя броя на елементите му. След като веднъж сме задали дължината на масив не е възможно да я променяме. ▸Деклариране на масив ▸Масиви в Java декларираме по следния начин: int[] myArray;
  • 95. Масиви-продължение В Java масив се създава с ключовата дума new, която служи за заделяне (алокиране) на памет: int[ ] myArray = new int[6]; В примера заделяме масив с размер 6 елемента от целочислен тип. Това означава, че в динамичната памет (heap) се заделя участък от 6 последователни цели числа. Елементите на масивите винаги се съхраняват в динамичната памет (в т. нар. heap). При заделянето на масив в квадратните скоби задаваме броя на елементите му (цяло неотрицателно число) и така се фиксира неговата дължина. Типът на елементите се записва след new, за да се укаже за какви точно елементи трябва да се задели памет. Масив с вече зададена дължина не може да се промени т.е. масивите са с фиксирана дължина.
  • 96. Масиви-продължение Инициализация на масив. ▸Преди да използваме елемент от даден масив той трябва да има начална стойност. В някои езици за програмиране не се задават начални стойности по подразбиране, и тогава при опит за достъпване да даден елемент възниква грешка. В Java всички променливи, включително и елементите на масивите имат начална стойност по подразбиране (default initial value). Тази стройност е равна на 0 при числените типове или неин еквивалент при нечислени типове (например null за обекти и false за булевия тип). Начални стойности можем да задаване и изрично. Това може да стане по различни начини. Един възможен е чрез използване на литерален израз за елементите на масива (array literal expression): int[] myArray = {1, 2, 3, 4, 5, 6};
  • 97. Лабораторно упражнение 5. Java Lab 5 Пример1. Създавяне на масив от цели числа. Масив се декларира посредством средни скоби ([ ]) след типа на елементите или името на масива!!! class ArrayDemo { public static void main(String[] args) { // declares an array of integers int[] anArray; // allocates memory for 10 integers anArray = new int[10]; // initialize first element anArray[0] = 100; // initialize second element anArray[1] = 200; // and so forth anArray[2] = 300; anArray[3] = 400; anArray[4] = 500; anArray[5] = 600; anArray[6] = 700; anArray[7] = 800; anArray[8] = 900; anArray[9] = 1000;
  • 98. Java Lab 5.Продължение Пример 1.Продължение. System.out.println("Element at index 0: " + anArray[0]); System.out.println("Element at index 1: " + anArray[1]); System.out.println("Element at index 2: " + anArray[2]); System.out.println("Element at index 3: " + anArray[3]); System.out.println("Element at index 4: " + anArray[4]); System.out.println("Element at index 5: " + anArray[5]); System.out.println("Element at index 6: " + anArray[6]); System.out.println("Element at index 7: " + anArray[7]); System.out.println("Element at index 8: " + anArray[8]); System.out.println("Element at index 9: " + anArray[9]); } }
  • 99. Java Lab 5.Продължение Резултат: Element at index 0: 100 Element at index 1: 200 Element at index 2: 300 Element at index 3: 400 Element at index 4: 500 Element at index 5: 600 Element at index 6: 700 Element at index 7: 800 Element at index 8: 900 Element at index 9: 1000
  • 100. Java Lab 5.Продължение Пример 2.Създаване и инициализация на масив. Масивите са обекти и се създават с оператора ‘new’ в динамичната памет (heap).Първият елемент на масива е винаги с индекс нула !! anArray = new int[10]; anArray[0] = 100; // initialize first element anArray[1] = 200; // initialize second element anArray[2] = 300; // and so forth //printing elements of array: System.out.println("Element 1 at index 0: " + anArray[0]); System.out.println("Element 2 at index 1: " + anArray[1]); System.out.println("Element 3 at index 2: " + anArray[2]);
  • 101. Java Lab 5.Продължение Запомнете: Размерността на масива се определя по време на изпълнението на програмата на Java,а не при неговото деклариране.Размерността може да се зададе и с константа! Пример 3. float[ ] arr1; arr1= new float[100]; //array of 100 elements real numbers; int size=1024*768; // size of array int rst; rst=new int[size]; // size of array is defined with const - size
  • 102. Java Lab 5.Продължение В Java е възможно да дефинирате многодименсионални масиви.Те се задават с определен брой ъглови скоби след името или типът на елементите на масива: Пример 4. //two-dimensional array with numbering each element int twoD[ ][ ] = new int[4][5]; class TwoDArray { public static void main(String args[]) { int twoD[][]= new int[4][5]; int i, j, k = 0; for(i=0; i<4; i++) for(j=0; j<5; j++) { twoD[i][j] = k; k++; }
  • 103. Java Lab 5.Продължение Пример 4. Продължение for(i=0; i<4; i++) { for(j=0; j<5; j++) System.out.print(twoD[i][j] + " "); System.out.println(); } } } //end of program Резултат: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
  • 104. Java Lab 5.Продължение Пример 5. Масив при който втората размерност се задава от програмиста по време на изпълнение на програмата: class TwoDAgain { public static void main(String args[]) { int twoD[][] = new int[4][]; twoD[0] = new int[1]; twoD[1] = new int[2]; twoD[2] = new int[3]; twoD[3] = new int[4]; int i, j, k = 0; for(i=0; i<4; i++) for(j=0; j<i+1; j++) { twoD[i][j] = k; k++; }
  • 105. Java Lab 5.Продължение Пример 5.Продължение for (i=0; i<4; i++) { for(j=0; j<i+1; j++) System.out.print(twoD[i][j] + " "); System.out.println(); } } } Резултат: 0 1 2 3 4 5 6 7 8 9
  • 106. Лекция 13. Въведение в обектно- ориентираното програмиране. Обекти – част 1. ▸В настоящата лекция ще се запознаем накратко с основните понятия в обектно-ориентираното програмиране – класовете и обектите (class, object)– и ще обясним как да използваме класовете от стандартните библиотеки на Java. Ще се спрем на някои често използвани системни класове и ще видим как се създават и използват техни инстанции (обекти). Ще разгледаме как можем да осъществяваме достъп до полетата на даден обект, как да извикваме конструктори и как да работим със статичните полета в класовете. Накрая ще се запознаем и какво представляват пакетите (package) в езика Java.
  • 107. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Понятие за класове и обекти Класовете са описание (модел) на реални предмети или явления, наречени същности (entities). Например класът "Студент". ▸Класовете имат характеристики – в програмирането са наречени свойства (properties). Например съвкупност от оценки. Класовете имат и поведение – в програмирането са наречени методи (methods). Например явяване на изпит. ▸Методите и свойствата могат да бъдат видими и невидими – от това зависи дали всеки може да ги използва или са само за вътрешна употреба в рамките на класа. ▸Обектите (objects) са екземпляри (инстанции) на класовете. Например Иван е Студент, Петър също е студент.
  • 108. Въведение в обектно-ориентираното програмиране(ООП).Обекти. Продължение Обектно-ориентираното програмиране е наследник на процедурното (структурно) програмиране. Процедурното програмиране най-общо казано описва програмите чрез група от преизползваеми парчета код (процедури), които дефинират входни и изходни параметри. Процедурните програми представляват съвкупност от процедури, които се извикват една друга. Проблемът при процедурното програмиране е, че преизползваемостта на кода е трудно постижима и ограничена – само процедурите могат да се преизползват, а те трудно могат да бъдат направени общи и гъвкави. Няма лесен начин да се реализират абстрактни структури от данни, които имат различни имплементации. Обектно-ориентираният подход залага на парадигмата, че всяка програма работи с данни, описващи същности (предмети и явления) от реалния живот.
  • 109. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Примери за обекти от реалния свят: Например една счетоводна програма работи с фактури, стоки, складове, наличности, продажби и т.н. По този начин се дефинират обектите в счетоводството. Компютърните програми за обработка данните на персонала на фирма,студентите в университет или учениците в колеж работят също с обекти:конкретни служители,студенти или ученици и техните характеристики (свойства). С тази технология в програмирането се описват характеристиките (свойства) и поведението (методи) на тези предмети или явления от реалния живот.
  • 110. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Основни принципи на ООП За да бъде един програмен език обектно-ориентиран, той трябва не само да позволява работа с класове и обекти, но и трябва да дава възможност за имплементирането и използването на принципите и концепциите на ООП: наследяване, абстракция, капсулация и полиморфизъм.Ще разгледаме в детайли всеки от тези основни принципи на ООП. - Наследяване (Inheritance) ( йерархиите от класове подобряват четимостта на кода и позволяват преизползване на функционалност); ▸ Абстракция (Abstraction) ( виждаме един обект само от гледната точка, която ни интересува, и да игнорираме всички останали детайли); - Капсулация (Encapsulation) (скриваме ненужните детайли в нашите класове и да предоставяме прост и ясен интерфейс за работа с тях);
  • 111. Въведение в обектно-ориентираното програмиране.Обекти.Продължение - Полиморфизъм (Polymorphism) ( работим по еднакъв начин с различни обекти, които дефинират специфична имплементация на някакво абстрактно поведение на обекта); Наследяване (Inheritance): Наследяването е основен принцип от обектно- ориентираното програмиране. То позволява на един клас да "наследява" (поведение и характеристики) от друг, по-общ клас. Например лъвът е от семейство котки. Всички котки имат четири лапи, хищници са, преследват жертвите си. Тази функционалност може да се напише веднъж в клас Котка и всички хищници да я преизползват – тигър, пума, рис и т.н.
  • 112. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Пример за дефиниция на клас: public class Puppy { public Puppy(String name) { // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public static void main(String []args) { // Following statement would create an object myPuppy Puppy myPuppy = new Puppy( "tommy" ); } }
  • 113. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Капсулация (Encapsulation) ▸Капсулацията се извършва с помоща на ключовите думи public, protected, private със съответното ограничение за достъп до полетата или методите на класa. Обекти от реалния свят В обектите от реалния свят (също и в абстрактните обекти) могат да се отделят следните две групи характеристики: - Състояния (states) – това са характеристики на обекта, които по някакъв начин го определят и описват по принцип или в конкретен момент. - Поведения (behaviors) – това са специфични характерни действия, които обектът може да извършва.
  • 114. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Елементи на класа в програмата на java Основните елементи на класа са следните: - Декларация на класа (class declaration) – това е редът, на който декларираме името на класа; - Тяло на клас – по подобие на методите, класовете също имат част, която следва декларацията им, оградена с фигурни скоби – "{" и "}", между които се намира съдържанието на класа. Тя се нарича тяло на класа.Пример: public class Dog { // ... Here the class body comes ... } - Конструктор (constructor) – това е псевдометод, който се използва за създаване на нови обекти. Така изглежда един конструктор:
  • 115. Въведение в обектно-ориентираното програмиране.Обекти.Продължение public Dog() { // ... Some code ... } Полета (fields) – полетата са променливи (някъде в литературата се срещат като член-променливи), декларирани в класа. В тях се пазят данни, които отразяват състоянието на обекта и са нужни за работата на методите на класа. Стойността, която се пази в полетата, отразява конкретното състояние на дадения обект, но съществуват и такива полета, наречени статични, които са общи за всички обекти. ▸// Field/Property-storage definition ▸private String name;
  • 116. Въведение в обектно-ориентираното програмиране.Обекти.Продължение Свойства (properties) – наричаме характерните особености на даден клас. Обикновено стойността на тези характеристики се пази в полета. Подобно на полетата, свойствата могат да бъдат притежавани само от конкретен обект, или да са споделени между всички обекти от тип даден клас. // Field/Property-storage definition private String name; Методи (methods) – методите са мястото в класа, където се описва поведението на обектите от този тип. В методите се изпълняват алгоритмите и се обработват данните на обекта. Като пример ще дефинираме клас “Cat”, който съдържа следните елементи, описани по-горе:
  • 117. Въведение в обектно-ориентираното програмиране.Обекти.Продължение ▸public class Cat { ▸// Field name ▸private String name; // Field color ▸private String color; //Field name ▸ // Default constructor ▸public Cat() { ▸this.name = "Unnamed"; ▸this.color = "gray"; ▸} // Constructor with parameters name,color ▸public Cat(String name, String color) { ▸this.name = name; ▸this.color = color; ▸}
  • 118. Въведение в обектно-ориентираното програмиране.Обекти.Продължение // Getter of property name ▸public String getName() ▸{return this.name; ▸} ▸// Setter of property name ▸public void setName(String name) ▸{this.name = name; ▸} ▸// Getter of property color ▸public String getColor() { ▸return this.color; ▸} ▸// Setter of property color ▸public void setColor(String color) { ▸this.color = color; ▸} }
  • 119. Въведение в обектно-ориентираното програмиране.Обекти.Продължение ▸// Method sayMiau ▸public void sayMiau() { ▸System.out.printf("Cat %s said: Miauuuuuu!%n", name); ▸} } Извикването на метода System.out.printf(…) на класа java.lang.System е пример за употребата на системен клас в Java. Системни наричаме класовете, дефинирани в стандартните библиотеки за изграждане на приложения с Java (или друг език за програмиране). Те могат да се използват във всички наши приложения на Java. Такива са например класовете String, System и Math, които ще разгледаме малко по-късно. ▸Важно е да се знае, че имплементацията на класовете е капсулирана (скрита).
  • 120. Въведение в обектно-ориентираното програмиране.Обекти.Продължение ▸При използването на методите на даден клас от приложния програмист, тяхната имплементация е независима от употребата им. При системни класове имплементация обикновено дори не е достъпна за програмиста, който ги използва. Това е така, защото за програмиста е от значение какво правят методите, а не как го правят. По този начин се създават нива на абстракция, което е един от основните принципи в ООП.
  • 121. Лекция 14. Обекти- част 2.Класове. Създаване и освобождаване на обекти Създаването на обекти от предварително дефинирани класове по време на изпълнението на програмата става чрез оператора new. Новосъздаденият обект обикновено се присвоява на променлива от тип, съвпадащ с класа на обекта. Ще отбележим, че при това присвояване същинският обект не се копира. В променливата се записва само референция към новосъздадения обект (неговият адрес в паметта). Следва прост пример как става това: Cat someCat = new Cat(); На променливата someCat от тип Cat присвояваме новосъздадена инстанция на класа Cat. Променливата someCat стои в стека, а нейната стойност (инстанцията на класа Cat) стои в динамичната памет:
  • 122. Обекти- част 2.Класове.Продължение На фигурата е показано разположението на стековата и динамичната памет в оперативната памет на компютъра. Stack е статична памет,която съдържа адреси на обекти, докато динамичната памет се означава като heap и съдържа стойностите на самите обекти.
  • 123. Обекти- част 2.Класове. Създаване на обекти със задаване на параметри Сега ще разгледаме леко променен вариант на горния пример, при който задаваме параметри при създаването на обекта: Cat myBrownCat = new Cat("Johnny", "brown"); В този пример инициализиращите параметри са всъщност параметри на конструктора на класа. Понеже член-променливите name и color на класа Cat са от референтен тип (от класа String), те се записват също в динамичната памет (heap) и в самия обект стоят техните референции (адреси).
  • 125. Обекти- част 2.Класове. Продължение Освобождаване на обектите Важна особеност на работата с обекти в Java e, че обикновено няма нужда от ръчното им разрушаване и освобождаване на паметта, заета от тях. Това е възможно поради наличието на garbage collector във виртуалната машина, който се грижи за това вместо нас. Обектите, към които в даден момент вече няма референция в програмата автоматично се унищожават и паметта, която заемат се освобождава. По този начин се предотвратяват много потенциални бъгове и проблеми. Ако искаме ръчно да освободим даден обект, трябва да унищожим референция към него, например така: myBrownCat = null;
  • 126. Лабораторно упражнение 6. Java Lab 6 ▸Пример 1.Дефиниране на класове, обекти и конструктори на обекти в Java. ▸class Language { String name; Language() ▸{ System.out.println("Constructor method called."); } ▸Language(String t) { name = t; } ▸ public static void main(String[] args) { Language cpp = new Language(); Language java = new Language("Java"); cpp.setName("C++"); java.getName(); cpp.getName(); } void setName(String t) { name = t; } void getName() { System.out.println("Language name: " + name); } }