oop java introduction object oriented programming java
Този видео урок ще въведе концепции за OOP (обектно ориентирано програмиране) в Java като Object, Class, Inheritance, Polymorphism, Abstraction, Encapsulation и т.н.:
В софтуерното програмиране имаме различни видове езици за програмиране. Основните езици сред тях имат процедурен или обектно-ориентиран характер.
В езиците за процедурно програмиране по-големите проблеми се разбиват на малки разрешими проблеми. Тези малки проблеми се превръщат в процедури или функции. По този начин процедурният език за програмиране набляга на функции, а не на данни. По този начин процедурните езици са пренебрегнали данните напълно и по този начин те изобщо не осигуряват сигурност на данните.
За този проблем се погрижи обектно-ориентираният език за програмиране. Обектно-ориентираното програмиране е начин за проектиране и програмиране на софтуер чрез манипулиране на обекти и обектите са основната част от програмирането.
Открийте цялата ни серия уроци за Java за начинаещи тук .
Какво ще научите:
Видео уроци за OOPS концепции
OOPS концепция в Java - Част 1:
Задълбочен поглед върху OOPS Concept в Java - Част 2:
Обектно-ориентираните езици за програмиране наблягат повече на данните, отколкото на функциите. Обектно-ориентираното програмиране (OOP) се върти около обекти, т.е. обект в реално време.
Този обект обединява данни и методите, които работят с тези данни в една единица. По този начин данните са защитени от външния свят, като разполагат с методите вътре в обекта. В ООП обектите комуникират помежду си чрез съобщения.
Всеки OOP език поддържа следните функции:
- Класове
- Капсулиране
- Абстракция
- Наследяване
- Полиморфизъм
Всички тези функции гарантират, че данните са защитени и в същото време можем да напишем и стабилни приложения. Smalltalk, C ++, Java и др. Са някои от обектно-ориентираните езици за програмиране.
В този урок ще обсъдим основите на ООП относно езика Java.
Обектно-ориентирано програмиране (OOP) в Java
Java е най-търсеното умение за програмиране в момента. В Java всичко се базира на обекта. Java има корен клас, наречен Object, от който се извлича цялата функционалност на Java. По този начин в този урок ще обсъдим основните характеристики на ООП относно Java.
Препоръчително четене => Въпроси и отговори за интервю за ООП
Тук ще обсъдим как Java поддържа следните функции на OOP.
- Обект и клас
- Клас
- Наследяване
- Полиморфизъм
- Абстракция
- Капсулиране
Нека обсъдим подробно всяка от тези концепции за Java OOP.
Обект и клас
Класът може да бъде дефиниран като прототип на проекта или като план. Обектите се създават от тези чертежи. По същество той дефинира общ тип, състоящ се от свойства и методи, които работят с тези свойства за този общ тип. След това дефинираме екземплярите на този клас, наречен обекти.
Един клас има много компоненти, както е показано на следващата фигура.
Обектът представлява обект от реалния живот. В Java обектът е екземпляр на клас. Така че клас, който е план, може да се използва за създаване на много обекти. Тези обекти често комуникират помежду си, като си предават съобщения чрез методи.
Видео урок: Класове и обекти
Обектът обикновено има:
- Щат: Свойствата или атрибутите на даден обект в определен момент.
- Поведение: Методите представляват поведението на обект. Методите също така определят как обектите комуникират.
- Идентичност: Идентифицира обекта, като му дава уникално име.
Например, ако имаме клас PetAnimals.
Тогава можем да дефинираме обект от този клас, както следва:
PetAnimals pig = нови PetAnimals.
Тук самоличността на обекта е прасе.
По-долу е дадена програма, която демонстрира клас и обект.
//student class class Student{ int roll_No; String student_name; } class Main{ public static void main(String args()){ //Create objects of class Student Student student1=new Student(); Student student2=new Student(); //Initialize Student class objects student1.roll_No=101; student1.student_name='Lisa'; student2.roll_No=102; student2.student_name='Dan'; //Print object data System.out.println('Student 1 Details: ' + student1.roll_No+' '+student1.student_name); System.out.println('Student 2 Details: ' + student2.roll_No+' '+student2.student_name); } }
Изход
В горния клас дефинирахме клас Student с две свойства roll_No и student_name. След това в основния метод декларираме два обекта от клас, т.е. student1 и student2. Имайте предвид, че тези обекти са създадени с помощта на нов оператор. След като обектите са създадени, ние присвояваме данни и на двете свойства на обекта.
И накрая, ние отпечатваме съдържанието на обекта с помощта на оператор ‘.’ (Точка).
Ще научим повече за класове и обекти в нашите специфични теми за уроци по ООП.
Наследяване
Наследяването е една от най-важните характеристики на ООП. Чрез наследяване Java насърчава повторната употреба на кода.
И така, какво е наследство в Java?
Наследяването е механизъм в Java, при който един клас може да наследи свойствата на друг клас. Свойствата, които могат да бъдат наследени, включват членове на данни и методи на класа.
Класът, който наследява свойствата на друг клас, се нарича подклас. Наследеният клас е известен като “супер” клас в Java.
Чрез наследяване на класа, подкласът не само наследява свойствата, но също така използва повторно кода, тъй като програмистът не трябва да пише отново кода, когато може директно да го наследи, използвайки наследяване.
В Java наследяването се постига с помощта на ключовата дума „extends“. Тази ключова дума extends се използва в дефиницията на класа и е последвана от името на класа, което трябва да бъде наследено.
Например,ако има два класа, A и B, и A трябва да се наследи от B, тогава това наследство се записва в Java като:
class B extends A { …… }
Както вече споменахме, тук A е суперкласът или базовият клас или родителският клас. B е подклас, производен клас или дъщерен клас.
Наследството се разделя допълнително на следните видове.
Java поддържа единично, многостепенно и йерархично наследяване.
Имайте предвид, че Java не поддържа множество наследства. Java също не поддържа хибридно наследяване, което е комбинация от множество и йерархични наследства.
Дадено по-долу е примерна програма за единично наследяване в Java.
//base class class Employee{ float salary=50000; } //derived class class Developer extends Employee{ int bonus=20000; } class Main{ public static void main(String args()){ //declare Developer class object and access properties of base and derived class Developer p=new Developer(); System.out.println('Inheritance in Java'); System.out.println('Developer salary: '+p.salary); System.out.println('Bonus declared for Developer: '+p.bonus); System.out.println('Developer Total Earnings: ' + (p.salary + p.bonus)); } }
Изход
В горната програма имаме служител от базовия клас. Имаме друг клас Developer, който наследява от класа Employee. В основния метод можем да видим, че чрез деклариране на обект от клас Developer можем да получим достъп не само до свойствата на класа Developer, но и до класа Employee, тъй като той се наследява от класа Developer.
Полиморфизъм
Полиморфизмът е още една важна характеристика на ООП. Полиморфизмът е способността на езика да позволява на обекти или обекти да приемат множество форми. Например, метод, който има различни реализации е полиморфен в Java.
Полиморфизмът е два вида в Java:
- Претоварване или компилиране на полиморфизъм във времето: При полиморфизма по време на компилация извикването на полиморфния или претоварен метод се разрешава по време на компилиране.
- Заместващ или времетраещ полиморфизъм: В полиморфизма по време на изпълнение, извикването на заменен метод в програмата Java се разрешава по време на изпълнение.
Ще обсъдим подробно полиморфизма в следващите ни уроци.
По-долу е даден пример за полиморфизъм по време на компилация в Java, при който имаме метод за добавяне, който е претоварен, за да извърши добавяне с различни типове операнди.
class Numbers_Sum { //add method : takes two int parameters public int add(int val1, int val2) { return (val1 + val2); } // overloaded add : takes three int parameters public int add(int val1, int val2, int val3) { return (val1 + val2 + val3); } //overloaded add: takes two double parameters public double add(double val1, double val2) { return (val1 + val2); } } class Main{ public static void main(String args()) { //create an object of Numbers_Sum class and call overloaded functions Numbers_Sum numsum = new Numbers_Sum(); System.out.println('Polymorphism in Java'); System.out.println('add(int, int): ' + numsum.add(15, 18)); System.out.println('add(int, int, int): ' + numsum.add(5, 10, 20)); System.out.println('add(double,double): ' + numsum.add(5.5, 15.5)); } }
Изход
В тази програма имаме три претоварени метода с име add. Първият метод взема два int параметъра, следващият метод взема три int параметъра, а третият метод взема два двойни параметъра. В зависимост от броя на параметрите извикването на метода се разрешава по време на компилация и се прави съответното извикване.
Абстракция
Използвайки абстракция на данни, ние излагаме само основните части на приложението, които са направени достъпни за потребителя. Например, ако имаме автомобил, ние не сме загрижени за вътрешните компоненти на колата, а по-скоро разглеждаме автомобила само като цяло.
Използвайки механизъм за абстрахиране на данни, ние само идентифицираме необходимите подробности и игнорираме неподходящите подробности. Java използва абстрактни класове и интерфейси за постигане на абстракция. Интерфейсите са 100% абстрактни, тъй като имат само прототипи на методи, а не тяхната дефиниция.
Примерът по-долу показва абстрактен клас и неговото използване.
// Abstract class declaration abstract class PetAnimal { // Abstract method: should be defined in derived class public abstract void animalSound(); // non-abstract method public void print() { System.out.println('This method is example of abstraction'); } } // Derived class class Dog extends PetAnimal { //abstract method defined here public void animalSound() { System.out.println('The doggy barks'); } } class Main { public static void main(String() args) { Dog doggy = new Dog(); // Instantiate derived class and call methods doggy.animalSound(); doggy.print(); } }
Изход
В горната програма имаме абстрактен клас PetAnimals. В това имаме абстрактен метод ‘animalSound’. След това създаваме клас Dog и наследяваме класа PetAnimals. В класа Куче ние заместваме метода animalSound.
софтуер за изтегляне на видеоклипове от youtube
Капсулиране
Капсулирането е скриване на данни или защита на данните. При програмирането постигаме капсулиране, като обгръщаме данни и методи, работещи с тези данни, в една единица.
Видео урок: Капсулиране и полиморфизъм в Java
Класът може да се разглежда като единица за капсулиране, т.е. имаме членове на данни и методи, работещи с тези членове на данни, групирани в една единица.
Правилното капсулиране може да бъде постигнато чрез превръщане на членовете на данните в частни и чрез използване на методите, работещи с тези данни, като публични, така че данните да бъдат напълно защитени от външните обекти.
Долната програма Java демонстрира концепцията за капсулиране.
class Customer_Account { //private data of class private long customer_accountNo; private String customer_name,customer_email; private float customer_salary; //public getter/setter methods to access private data public long getAcc_no() { return customer_accountNo; } public void setAcc_no(long acc_no) { this.customer_accountNo = acc_no; } public String getName() { return customer_name; } public void setName(String name) { this.customer_name = name; } public String getEmail() { return customer_email; } public void setEmail(String email) { this.customer_email = email; } public float getSalary() { return customer_salary; } public void setSalary(float salary) { this.customer_salary = salary; } } public class Main { public static void main(String() args) { //create an object of customer_Account class Customer_Account acc=new Customer_Account(); //use setter methods to set values acc.setAcc_no(123458765432L); acc.setName('SoftwareTestingHelp'); acc.setEmail('sth@sth.com'); acc.setSalary(65000f); //use getter methods to read values System.out.println('Customer Account Number: ' + acc.getAcc_no()); System.out.println('Customer Account Details:'); System.out.println(' Customer Name: '+acc.getName()+'
'+ ' Customer Email: ' + acc.getEmail()+'
' + ' Customer Salary: ' +acc.getSalary()); } }
Изход
В горната програма имаме клас Customer_Account.
В този клас имаме членове на данните, които са всички частни. След това за всяко частно поле предоставяме методи за получаване и задаване, съответно за четене и задаване на стойности. Тези гетери и сетери са публични. По този начин ние защитаваме полетата с данни, като не им позволяваме директен достъп извън класа.
Те могат да бъдат достъпни само чрез гетери и сетери. Това показва капсулирането, което описахме по-горе.
често задавани въпроси
В # 1) Какво се разбира под обектно-ориентирано програмиране?
Отговор: Обектно-ориентираното програмиране (OOP) е софтуерна парадигма, която се върти около данните. В ООП акцентът се поставя върху данните и по този начин проблемите се изразяват по отношение на обекти, които са обекти, състоящи се от данни или полета и методи, които работят с тези полета с данни.
По този начин се прилагат няколко отличителни характеристики на OOP като наследяване, полиморфизъм, абстракция и капсулиране, за да се осигури безопасност на данните, повторна употреба и т.н.
В # 2) Кои са четирите основни принципа на ООП?
Отговор:Обектно-ориентираното програмиране (OOP) има четири основни принципа:
- Наследяване
- Полиморфизъм
- Абстракция
- Капсулиране
Те се наричат още четири стълба на ООП.
В # 3) Защо Java се нарича обектно-ориентирана?
Отговор: Java има обект на корен клас, от който извличаме всички останали характеристики на Java. По този начин без клас и обект не можем да имаме Java програма. Следователно Java се нарича OOP език.
В # 4) Java чисто обектно-ориентирана ли е?
Отговор: Не, Java не е чист обектно-ориентиран език. Тъй като Java също предоставя примитивни типове данни като int, char, float, double, long и т.н., тя не се класифицира като чист OOP език.
В # 5) Каква е разликата между C ++ и Java?
Отговор: И C ++, и Java са обектно-ориентирани езици и поддържат OOP функции. Но C ++ е компилиран език. Java, от друга страна, е компилиран, както и интерпретиран език.
Интерпретаторът Java изпълнява байтовия код по време на изпълнение и генерира изход, което го прави независим от платформата. C ++ обаче зависи от платформата.
Повече за концепцията на OOPS
Клас
Класът е план / прототип на обект от реалния свят и той моделира състоянието и поведението на този обект от реалния свят.
Декларация за клас
class MyClass { // field, constructor, and // method declarations }
Class room(){ //room should have dimension. Dimension is attribute. //in the room, we are going keep things. Keeping is the function we are going to do. Keepthings (); this is a method in java. }
Обект
Софтуерните обекти са като обекти от реалния живот със състояние и поведение. Състоянието ще се съхранява като поле и ще изложи поведението му като методи.
Тук стаята е като общ дизайн. В тази стая трябва да проектирате хол, готварска стая, спалня.
Class CookingRoom(){ Dimension is attribute. //here we should have method to keep cooking things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold cooking items. } cooking(); }
Class LivingRoom(){ Dimension is attribute. //here we should have method to keep Living Room things. Keepthings(){ This method is same like room class keep things method. but it should have some more features to hold living room items(like tv etc). } watching tv(); }
Тук методът „Keepthings ()“ трябва да изпълнява основните функционалности, необходими за стаята, и трябва да има допълнителна спецификация според изискванията за клас „хол“ и „стая за готвене“. Така че двата класа трябва да наследят методите в класа „стая“.
Наследяване
Поведението (методите) и състоянието на един клас, наследени от другия клас, се наричат наследяване. Методите и състоянието се наследяват от родителския клас към дъщерния клас.
Така,
Class CookingRoom extends Room{ }
Class LivingRoom extends Room{ }
Полиморфизъм
В биологията полиморфизмът се отнася до подправките, които могат да имат много различни форми.
Със същата концепция в обектно-ориентираното програмиране, дъщерният клас може да наследи своите методи на родителски клас, също така може да добави уникални функции към това поведение. Полиморфизмът може да се постигне чрез претоварване или заместване на метода.
Претоварване
public class OverloadDemo { public int add( int a,int b) { int rs=a+b; return rs; } public int add( int a,int b,int c) { int rs=a+b+c; return rs; } public static void main(String() args) { OverloadDemo ov=new OverloadDemo(); System.out.println(ov.add(23,56,45)); System.out.println(ov.add(23,56)); } }
Замяна
public class Bicycle { int wheels=2; String seat; public void riding() { System.out.println('bicycle is used for riding'); } }
public class RoadBicycle extends Bicycle{ public void riding() { System.out.println('RoadBicycle is used for road riding'); } }
public class TestBicycle { public static void main(String() args) { Bicycle b=new RoadBicycle(); b.riding(); } }
ИЗХОД: Тук методът на дъщерния клас заменя метода на родителския клас.
Супер ключова дума
Ключовата дума Super е референтна променлива, която се използва за препратка към непосредствения обект на родителски клас. Със супер ключова дума можете да препратите метод на родителски клас или променливи или конструктор.
Тази ключова дума
Тази ключова дума се използва за препратка към текущия обект на клас. Използвайки тази ключова дума, можете да получите достъп до текущата променлива на екземпляра на класа или метод на текущия клас. Това може да бъде предадено като аргумент в извикването на метода.
public class DemoThisKeyword { private int accno; private int balance; public void setvalues(int accno,int balance) { this.accno=accno; this.balance=balance; } public int showdata() { System.out.println(accno); System.out.println(balance); return balance; } public static void main(String() args) { // TODO Auto-generated method stub DemoThisKeyword obj =new DemoThisKeyword(); obj.setvalues(11, 100); obj.showdata(); System.out.println(obj.showdata()); } }
Строител
Java конструкторите са като методи, които ще бъдат извикани, когато обектът е създаден за класа. Конструкторът трябва да има същото име като класа.
Class Myclass{ Myclass(); Method1() { } }
Докато създавате обект за класа, Myclass myobj = new Myclass ();
Ще бъде извикан методът на конструктора. Конструкторът се създава автоматично от Java компилатора за всички класове по подразбиране.
public class ConstructorExampleProgram { int employee_age; String employee_name; int employee_salary; //Default constructor ConstructorExampleProgram(){ this.employee_name=Bob'; this.employee_age=30; this.employee_salary=7000; } //Parameterized constructor ConstructorExampleProgram(String n,int a,int b){ this.employee_name=n; this.employee_age=a; this.employee_salary=b; } public static void main(String args()){ ConstructorExampleProgram obj1 = new ConstructorExampleProgram(); ConstructorExampleProgram obj2 = new ConstructorExampleProgram('clare', 56,7500); System.out.println(obj1.employee_name+' '+obj1.employee_age+' '+obj1.employee_salary); System.out.println(obj2.employee_name+' '+obj2.employee_age+' '+obj2.employee_salary); } }
Правила, които трябва да се спазват за конструктора:
- Конструкторът трябва да има същото име като името на класа.
- Конструкторът не трябва да има оператор return.
Точки, които трябва да се отбележат:
- При обектно-ориентираното програмиране обектите са основната част от програмирането.
- OOP концепциите са обект, клас, наследяване, полиморфизъм, конструктор.
- Супер ключова дума, използвана за препратка към членовете на родителския клас, и това ключовата дума се използва за препратка към текущ обект на клас.
- Конструкторите са като методи, които ще бъдат извикани, когато обектът е създаден за класа.
Заключение
Този урок обхваща основите на важни обектно-ориентирани функции, поддържани от Java. Това е само уводен урок за OOPS в Java. Ще разгледаме подробно всички теми в следващите ни уроци. Java поддържа четири стълба на ООП, т.е.полиморфизъм, наследяване, абстракция и капсулиране.
Освен тези функции, Java поддържа и други функции и OOP конструкции като ограничаване, агрегиране, предаване на съобщения и др., Които ще бъдат обсъдени в предстоящите ни уроци.
Препоръчително четене
- Урок за JAVA за начинаещи: 100+ практически ръководства за Java видео
- Какво е абстракция в Java - Научете с примери
- Какво е наследяване в Java - Урок с примери
- Какво е полиморфизъм в Java - Урок с примери
- Капсулиране в Java: Пълно ръководство с примери
- Видове наследяване в Java - единично срещу множествено наследяване
- OOPS концепции в C #: Урок за концепция за обектно ориентирано програмиране
- Обектно-ориентирано програмиране в C ++