oop java introduction object oriented programming java
Цей відеоурок познайомить з поняттями OOP (об’єктно-орієнтоване програмування) на Java, такими як об’єкт, клас, успадкування, поліморфізм, абстракція, інкапсуляція тощо:
У програмуванні програмного забезпечення ми маємо різні типи мов програмування. Основні мови серед них мають процедурний або об'єктно-орієнтований характер.
У процедурних мовах програмування більші проблеми розбиваються на невеликі вирішувані проблеми. Ці невеликі проблеми перетворюються на процедури або функції. Таким чином, процедурна мова програмування наголошує на функціях, а не на даних. Таким чином, процедурні мови повністю знехтували даними, і, отже, вони взагалі не забезпечують безпеку даних.
Цією проблемою подбала об’єктно-орієнтована мова програмування. Об'єктно-орієнтоване програмування - це спосіб проектування та програмування програмного забезпечення шляхом маніпулювання об'єктами, і об'єкти є основною частиною програмування.
Відкрийте для себе всю нашу серію підручників Java для початківців тут .
Що ви дізнаєтесь:
Відео-підручники з концепцій OOPS
Концепція OOPS в Java - Частина 1:
Поглиблений огляд концепції OOPS в Java - Частина 2:
Об'єктно-орієнтовані мови програмування наголошують на даних більше, ніж на функціях. Об'єктно-орієнтоване програмування (ООП) обертається навколо об'єктів, тобто сутності реального часу.
Цей об’єкт об’єднує дані та методи, що діють на ці дані, в одному блоці. Таким чином, дані захищаються від зовнішнього світу за допомогою методів всередині об’єкта. В ООП об’єкти спілкуються між собою за допомогою повідомлень.
Будь-яка мова ООП підтримує такі функції:
- Заняття
- Капсуляція
- Абстракція
- Спадщина
- Поліморфізм
Усі ці функції забезпечують захист даних, і в той же час ми також можемо писати надійні програми. Smalltalk, C ++, Java тощо є одними з об’єктно-орієнтованих мов програмування.
У цьому підручнику ми обговоримо основи ООП щодо мови Java.
Об'єктно-орієнтоване програмування (ООП) на Java
На даний момент Java є найбільш затребуваною навичкою програмування. У Java все базується на об'єкті. Java має кореневий клас під назвою Object, з якого походить вся функціональність Java. Таким чином, у цьому підручнику ми обговоримо основні особливості ООП щодо Java.
Рекомендована література => Запитання та відповіді на інтерв’ю ООП
Тут ми поговоримо, як Java підтримує такі функції ООП.
- Об'єкт і клас
- Клас
- Спадщина
- Поліморфізм
- Абстракція
- Капсуляція
Давайте обговоримо кожну з цих концепцій 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 також не підтримує гібридне успадкування, яке є комбінацією множинних та ієрархічних успадкувань.
Нижче наведено приклад програми Single Inheritance в 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)); } }
Вихідні дані
У наведеній вище програмі ми маємо базовий клас Employee. У нас є інший розробник класу, який успадковується від класу Employee. В основному методі ми бачимо, що, оголосивши об’єкт класу Developer, ми можемо отримати доступ не тільки до властивостей класу Developer, але й до класу Employee, оскільки він успадковується класом Developer.
Поліморфізм
Поліморфізм - ще одна важлива особливість ООП. Поліморфізм - це здатність мови дозволяти об’єктам або сутностям приймати різні форми. Наприклад, метод, який має різні реалізації, є поліморфним у Java.
Поліморфізм у Java має два типи:
- Перевантаження або компіляція часового поліморфізму: У поліморфізмі під час компіляції виклик поліморфного або перевантаженого методу вирішується під час компіляції.
- Перевизначення або час виконання поліморфізму: У поліморфізмі виконання, виклик перевизначеного методу в програмі Java вирішується під час виконання.
Ми детально обговоримо поліморфізм у наступних підручниках.
Нижче наведено приклад поліморфізму часу компіляції в Java, де ми маємо метод add, який перевантажений для виконання додавання з різними типами операндів.
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. У класі Dog ми замінюємо метод animalSound.
сайти тестування продуктів, які надсилають речі
Капсуляція
Інкапсуляція - це приховування даних або захист даних. У програмуванні ми досягаємо інкапсуляції, обертаючи дані та методи, що працюють над цими даними, в єдину одиницю.
Відео-посібник: Інкапсуляція та поліморфізм у 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.
У цьому класі ми маємо членів даних, які є приватними. Тоді для кожного приватного поля ми пропонуємо методи отримання та встановлення значень відповідно для зчитування та встановлення значень. Ці геттери та сетери є загальнодоступними. Таким чином ми захищаємо поля даних, не дозволяючи їм прямо отримувати доступ з-поза класу.
Доступ до них можливий лише через геттери та сетери. Це демонструє інкапсуляцію, яку ми описали вище.
Часті запитання
Q # 1) Що мається на увазі під об’єктно-орієнтованим програмуванням?
Відповідь: Об'єктно-орієнтоване програмування (ООП) - це програмна парадигма, яка обертається навколо даних. У ООП наголос робиться на даних, і, таким чином, проблеми виражаються в об'єктах, які є сутностями, що складаються з даних або полів, і методами, які працюють з цими полями даних.
Роблячи це, застосовуються кілька відмітних ознак ООП, такі як спадкування, поліморфізм, абстракція та інкапсуляція, щоб забезпечити безпеку даних, їх повторне використання тощо.
Q # 2) Які 4 основні принципи ООП?
Відповідь:Об'єктно-орієнтоване програмування (ООП) має чотири основні принципи:
- Спадщина
- Поліморфізм
- Абстракція
- Капсуляція
Їх також називають чотирма стовпами ООП.
Q # 3) Чому Java називається об’єктно-орієнтованою?
Відповідь: Java має об’єкт кореневого класу, з якого ми отримуємо всі інші особливості Java. Таким чином, без класу та об'єкта ми не можемо мати програму Java. Тому Java називається OOP-мовою.
Q # 4) Чи Java є суто об'єктно-орієнтованою?
Відповідь: Ні, Java не є чисто об’єктно-орієнтованою мовою. Оскільки Java також забезпечує примітивні типи даних, такі як int, char, float, double, long тощо, вона не класифікується як чиста мова OOP.
Q # 5) У чому різниця між C ++ та Java?
Відповідь: І C ++, і Java є об'єктно-орієнтованими мовами та підтримують функції ООП. Але 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(); }
Тут метод “Зберігання ()” повинен виконувати основні функціональні можливості, необхідні для кімнати, і він повинен мати додаткові специфікації відповідно до класу “вітальня” та клас “кухонна кімната”. Отже, два класи повинні успадкувати методи в класі “room”.
Спадщина
Поведінка (методи) і стан одного класу, успадкованого іншим класом, називаються успадкуванням. Методи та стан успадковуються від батьківського класу до дочірнього класу.
Тому,
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 - це посилальна змінна, яка використовується для посилання на безпосередній об’єкт батьківського класу. За допомогою ключового слова 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.
Бали, на які слід звернути увагу:
- В об'єктно-орієнтованому програмуванні об'єкти є основною частиною програмування.
- Поняття ООП - це об’єкт, клас, успадкування, поліморфізм, конструктор.
- Супер ключове слово, що використовується для посилання на членів батьківського класу, та це Ключове слово використовується для посилання на поточний об'єкт класу.
- Конструктори схожі на методи, які будуть викликані при створенні об'єкта для класу.
Висновок
Цей підручник висвітлив основи важливих об’єктно-орієнтованих функцій, що підтримуються Java. Це лише вступний підручник з OOPS в Java. Ми будемо детально висвітлювати всі теми в наступних підручниках. Java підтримує чотири стовпи ООП, тобто поліморфізм, успадкування, абстракція та інкапсуляція.
Окрім цих функцій, Java також підтримує інші функції та конструкції ООП, такі як стримування, агрегування, передача повідомлень тощо, які будуть розглянуті в наступних навчальних посібниках.
Рекомендована література
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java
- Що таке абстракція в Java - дізнайтеся на прикладах
- Що таке спадкування в Java - Підручник з прикладами
- Що таке поліморфізм у Java - Підручник із прикладами
- Інкапсуляція в Java: Повний посібник із прикладами
- Типи успадкування в Java - одиночні проти багаторазового успадкування
- Концепції OOPS у C #: Підручник з концепції об’єктно-орієнтованого програмування
- Об'єктно-орієнтоване програмування на C ++