SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Вводный курс в Java
                        Занятие 3




Александр Русин
e-mail: alexander.rusin@simbirsoft.com
Структура класса
//импорт пакетов
import java.util.*;
public class Sample {
    //метод класса
    public int method(int z) {
       return z;
    }
   //точка входа в программу
   public static void main(String[] args) {
      Sample s = new Sample();
      System.out.print(s.method(10));
  }
}
Элементы класса
public class Sample {
    private int x; // переменная экземпляра класса
    private int y = 0; // переменная экземпляра класса
    public final int CURRENT_YEAR = 2012; // константа
    protected static int bonus; // переменная класса
    static String version = "Java SE 7"; // переменная класса
    protected Calendar now;
    public int method(int z) {
        return z++;
    }
}
Модификаторы доступа

    private: члены класса доступны только
    внутри класса;

    default (package-private) (модификатор, по-
    умолчанию): члены класса видны внутри
    пакета (если класс будет так объявлен он
    будет доступен только внутри пакета);

    protected: члены класса доступны внутри
    пакета и в наследниках;

    public: члены класс доступны всем;
Модификаторы доступа

    static - ссылка этого поля у любого
    экземпляра класса будет ссылаться на одно
    и то же значение

    final – это модификатор, позволяющий
    объявлять константные поля в классе.
Конструкторы
public class Quest {
    // конструктор без параметров (по умолчанию)
    public Quest() {
          System.out.println("Вызван конструктор без параметров!!!");
    }
    // конструктор с параметрами
    public Quest(int idc, String txt) {
          super(); /* вызов конструктора супер класса явным образом
        необязателен, компилятор вставит его автоматически*/
         System.out.println("Вызван конструктор c параметрами!!!");
         System.out.println(id + " " + text);
    }
}
Порядок
    инициализации класса
1.Статические поля
2.Поля
3.Конструктор


Порядок описания полей и методов не
 оказывает влияния на порядок
 инициализации.
Порядок
          инициализации класса
public class Department {
    { System.out.println("logic"); };             //2
    static { System.out.println("static logic"); } //1
    private int id = 7;
    public Department(int d) {
        id = d;
        System.out.println("конструктор");        //3
    }
    int getId() { return id; }
    { id = 10; System.out.println("logic"); }      //2
}
Наследование
Важнейший механизм ООП, позволяющий
описать новый класс на основе уже
существующего

    При наследовании свойства и
    функциональность родительского класса
    наследуются новым классом

    Класс-наследник имеет доступ к публичным и
    защищённым методам и полям класса
    родительского класса

    Класс-наследник может добавлять свои данные
    и методы, а также переопределять методы
    базового класса
Терминология

    Родительский или базовый класс (класс-родитель) – класс,
    выступающий в качестве основы при наследовании

    Класс-потомок (дочерний класс, класс-наследник) – класс,
    образованный в результате наследования от родительского
    класса

    Иерархия наследования – отношения между родительским
    классом и его потомками

    Интерфейс класса – совокупность публичных методов
    класса, доступная для использования вне класса
    В интерфейсной части данные обычно не размещают

    Реализация класса – совокупность приватных методов и
    данных класса
Графическое
изображение иерархий
    наследования
         Животное           Родительский класс




  Рыба              Птица             Классы потомки




          Орёл               Голубь          Классы потомки
Перегрузка методов в
     классе наследнике
Методы производного класса замещает собой
 все методы родительского класса с тем же
 именем, количеством и типом аргументов.
Преимущества
    использования наследования

    Возможность создания новых типов,
    расширяя или используя функционал уже
    имеющихся

    Возможность существования нескольких
    реализаций одного и того же интерфейса

    Абстракция

    Полиморфизм
Инкапсуляция

    Понимается сокрытие информации о
    внутреннем устройстве объекта

    Работа с объектом может вестись только
    через его общедоступный (public)
    интерфейс.

    Другие объекты не должны вмешиваться в
    "дела" объекта, кроме как используя вызовы
    методов.
Инкапсуляция
public class Point {
    private final double x; //видимо только внутри класса
private final double y;//видимо только внутри класса
    /** доступ к полю*/
    public double getX() {
        return x;
    }
    /** доступ к полю*/
    public double getY() {
        return y;
}
Абстракция
Абстра́кция (от лат. abstractio —
 «отвлечение») — отвлечение в процессе
 познания от несущественных сторон,
 свойств, связей предмета или явления с
 целью выделения их существенных,
 закономерных признаков.
Абстракция данных состоит в разделении
 несущественных деталей реализации
 подпрограммы и характеристик
 существенных для корректного её
 использования.
Абстрактный класс
public abstract class AbstractCourse {
    private String name;
    public AbstractCourse() {
    }
     public abstract void changeTeacher(int id);
    /*определение метода отсутствует */
    public void setName(String n) {
        name = n;
    }
}
Интерфейс
public interface IShape extends ILineGroup {
// int id; // ошибка, если нет инициализации
// void method(){} /* ошибка, так как
   абстрактный метод не может иметь тела!*/
    double getSquare(); // объявление метода
}
Интерфейс
Пример
public abstract class Triangle implements IShape {
    private double a, b, c;
    public Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    public double getPerimeter() {
        return a + b + c;
    }
}
Полиморфизм

    Полиморфи́зм — возможность объектов с
    одинаковой спецификацией иметь
    различную реализацию.

    «Один интерфейс, множество реализаций»
Полиморфизм
Полиморфизм
public class Runner {
    public static void printFeatures(IShape f) {
        System.out.printf("название:%s площадь:%.2f периметр:
         %.2f%n", f.getName(), f.getSquare(), f.getPerimeter());
    }
    public static void main(String[] args) {
        Rectangle r = new Rectangle(5, 9.95);
        Circle c = new Circle(7.01);
        printFeatures(r);
        printFeatures(c);
    }
}
Полиморфизм
Результат выполнения кода


    название:Прямоугольник площадь:49,75
    периметр: 29,90

    название:Круг площадь:154,38 периметр:
    44,05
Домашняя работа
1 Создать класс Pair (пара целых чисел); определить
 метод умножения на число и операцию сложения
 пар (a,b) + (c,d) = (а + b, с + d). Определить класс-
 наследник Money с полями: рубли и копейки.
 Переопределить операцию сложения и определить
 методы вычитания и деления денежных сумм.
2. Определить класс Pair с полями типа double.
  Реализовать операции сложения пар и умножения
  на число как в задании 1. Определить производный
  класс Complex и реализовать методы умножения
  (a, b) (с, d) = (ас - bd, ad + bс) и вычитания (a, b) - (с,
  d) = (а - b, с - d ).
Литература

    http://ru.wikipedia.org/wiki/%D0%98%D0%BD
    %D0%B4%D0%B5%D0%BA%D1%81%D0%BD%D1%8B
    %D0%B9_%D0%BC
    %D0%B0%D1%81%D1%81%D0%B8%D0%B2 (определения)

    http://www.javable.com/tutorials/fesunov/lesson5/ (примеры)

    http://ru.wikibooks.org/wiki/Java

    http://ru.wikipedia.org/wiki/
    %D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%
    BA%D1%86%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD
    %D0%BD%D1%8B%D1%85 (Абстракция)
Спасибо за внимание!

Más contenido relacionado

Destacado

Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Alexander Podkhalyuzin
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Alexander Podkhalyuzin
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераCodeFest
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlangYuri Zhloba
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаSergey Lobin
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблямSveta Bozhko
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 

Destacado (20)

Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)Scala для всех (РИФ 2015)
Scala для всех (РИФ 2015)
 
Scala #4
Scala #4Scala #4
Scala #4
 
Scala #5
Scala #5Scala #5
Scala #5
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEAScala plugin for IntelliJ IDEA
Scala plugin for IntelliJ IDEA
 
Scala #3
Scala #3Scala #3
Scala #3
 
Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)Under the hood of scala implicits (kl10tch 10.03.2015)
Under the hood of scala implicits (kl10tch 10.03.2015)
 
Scala training
Scala trainingScala training
Scala training
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Scala #2
Scala #2Scala #2
Scala #2
 
Backend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузераBackend: Пишем на Scala для браузера
Backend: Пишем на Scala для браузера
 
Erlang
ErlangErlang
Erlang
 
Distributed erlang
Distributed erlangDistributed erlang
Distributed erlang
 
Самурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программистаСамурайский путь молодого Scala-программиста
Самурайский путь молодого Scala-программиста
 
Переход на Scala: босиком по граблям
Переход на Scala: босиком по граблямПереход на Scala: босиком по граблям
Переход на Scala: босиком по граблям
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 

Similar a Lec 2

Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Anton Moiseenko
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.Igor Shkulipa
 
C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.Igor Shkulipa
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.Igor Shkulipa
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.Igor Shkulipa
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.Igor Shkulipa
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classesMERA_school
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2Technopark
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.genericsmuqaddas_m
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.Igor Shkulipa
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 

Similar a Lec 2 (20)

Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.Java Core. Lecture# 3. Part# 1. Abstract classes.
Java Core. Lecture# 3. Part# 1. Abstract classes.
 
Java. Classes.
Java. Classes.Java. Classes.
Java. Classes.
 
C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.C++ Базовый. Занятие 09.
C++ Базовый. Занятие 09.
 
C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.
 
C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.C++ Базовый. Занятие 10.
C++ Базовый. Занятие 10.
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
3. java lecture classes
3. java lecture classes3. java lecture classes
3. java lecture classes
 
C++ осень 2012 лекция 2
C++ осень 2012 лекция 2C++ осень 2012 лекция 2
C++ осень 2012 лекция 2
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
Bytecode
BytecodeBytecode
Bytecode
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Step 3.2
Step 3.2Step 3.2
Step 3.2
 
C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.C++ Базовый. Занятие 11.
C++ Базовый. Занятие 11.
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 

Más de Alexander Rusin (14)

Scala for android
Scala for androidScala for android
Scala for android
 
Lec 15
Lec 15Lec 15
Lec 15
 
Lec 14
Lec 14Lec 14
Lec 14
 
Lec 13
Lec 13Lec 13
Lec 13
 
Lec 12
Lec 12Lec 12
Lec 12
 
Lec 11
Lec 11Lec 11
Lec 11
 
Lec 10
Lec 10Lec 10
Lec 10
 
Lec 9
Lec 9Lec 9
Lec 9
 
Thread
ThreadThread
Thread
 
Lec 6
Lec 6Lec 6
Lec 6
 
Lec 5
Lec 5Lec 5
Lec 5
 
Lec 4
Lec 4Lec 4
Lec 4
 
Lec 3
Lec 3Lec 3
Lec 3
 
Lec 1
Lec 1Lec 1
Lec 1
 

Lec 2

  • 1. Вводный курс в Java Занятие 3 Александр Русин e-mail: alexander.rusin@simbirsoft.com
  • 2. Структура класса //импорт пакетов import java.util.*; public class Sample { //метод класса public int method(int z) { return z; } //точка входа в программу public static void main(String[] args) { Sample s = new Sample(); System.out.print(s.method(10)); } }
  • 3. Элементы класса public class Sample { private int x; // переменная экземпляра класса private int y = 0; // переменная экземпляра класса public final int CURRENT_YEAR = 2012; // константа protected static int bonus; // переменная класса static String version = "Java SE 7"; // переменная класса protected Calendar now; public int method(int z) { return z++; } }
  • 4. Модификаторы доступа  private: члены класса доступны только внутри класса;  default (package-private) (модификатор, по- умолчанию): члены класса видны внутри пакета (если класс будет так объявлен он будет доступен только внутри пакета);  protected: члены класса доступны внутри пакета и в наследниках;  public: члены класс доступны всем;
  • 5. Модификаторы доступа  static - ссылка этого поля у любого экземпляра класса будет ссылаться на одно и то же значение  final – это модификатор, позволяющий объявлять константные поля в классе.
  • 6. Конструкторы public class Quest { // конструктор без параметров (по умолчанию) public Quest() { System.out.println("Вызван конструктор без параметров!!!"); } // конструктор с параметрами public Quest(int idc, String txt) { super(); /* вызов конструктора супер класса явным образом необязателен, компилятор вставит его автоматически*/ System.out.println("Вызван конструктор c параметрами!!!"); System.out.println(id + " " + text); } }
  • 7. Порядок инициализации класса 1.Статические поля 2.Поля 3.Конструктор Порядок описания полей и методов не оказывает влияния на порядок инициализации.
  • 8. Порядок инициализации класса public class Department { { System.out.println("logic"); }; //2 static { System.out.println("static logic"); } //1 private int id = 7; public Department(int d) { id = d; System.out.println("конструктор"); //3 } int getId() { return id; } { id = 10; System.out.println("logic"); } //2 }
  • 9. Наследование Важнейший механизм ООП, позволяющий описать новый класс на основе уже существующего  При наследовании свойства и функциональность родительского класса наследуются новым классом  Класс-наследник имеет доступ к публичным и защищённым методам и полям класса родительского класса  Класс-наследник может добавлять свои данные и методы, а также переопределять методы базового класса
  • 10. Терминология  Родительский или базовый класс (класс-родитель) – класс, выступающий в качестве основы при наследовании  Класс-потомок (дочерний класс, класс-наследник) – класс, образованный в результате наследования от родительского класса  Иерархия наследования – отношения между родительским классом и его потомками  Интерфейс класса – совокупность публичных методов класса, доступная для использования вне класса В интерфейсной части данные обычно не размещают  Реализация класса – совокупность приватных методов и данных класса
  • 11. Графическое изображение иерархий наследования Животное Родительский класс Рыба Птица Классы потомки Орёл Голубь Классы потомки
  • 12. Перегрузка методов в классе наследнике Методы производного класса замещает собой все методы родительского класса с тем же именем, количеством и типом аргументов.
  • 13. Преимущества использования наследования  Возможность создания новых типов, расширяя или используя функционал уже имеющихся  Возможность существования нескольких реализаций одного и того же интерфейса  Абстракция  Полиморфизм
  • 14. Инкапсуляция  Понимается сокрытие информации о внутреннем устройстве объекта  Работа с объектом может вестись только через его общедоступный (public) интерфейс.  Другие объекты не должны вмешиваться в "дела" объекта, кроме как используя вызовы методов.
  • 15. Инкапсуляция public class Point { private final double x; //видимо только внутри класса private final double y;//видимо только внутри класса /** доступ к полю*/ public double getX() { return x; } /** доступ к полю*/ public double getY() { return y; }
  • 16. Абстракция Абстра́кция (от лат. abstractio — «отвлечение») — отвлечение в процессе познания от несущественных сторон, свойств, связей предмета или явления с целью выделения их существенных, закономерных признаков. Абстракция данных состоит в разделении несущественных деталей реализации подпрограммы и характеристик существенных для корректного её использования.
  • 17. Абстрактный класс public abstract class AbstractCourse { private String name; public AbstractCourse() { } public abstract void changeTeacher(int id); /*определение метода отсутствует */ public void setName(String n) { name = n; } }
  • 18. Интерфейс public interface IShape extends ILineGroup { // int id; // ошибка, если нет инициализации // void method(){} /* ошибка, так как абстрактный метод не может иметь тела!*/ double getSquare(); // объявление метода }
  • 20. Пример public abstract class Triangle implements IShape { private double a, b, c; public Triangle(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } public double getPerimeter() { return a + b + c; } }
  • 21. Полиморфизм  Полиморфи́зм — возможность объектов с одинаковой спецификацией иметь различную реализацию.  «Один интерфейс, множество реализаций»
  • 23. Полиморфизм public class Runner { public static void printFeatures(IShape f) { System.out.printf("название:%s площадь:%.2f периметр: %.2f%n", f.getName(), f.getSquare(), f.getPerimeter()); } public static void main(String[] args) { Rectangle r = new Rectangle(5, 9.95); Circle c = new Circle(7.01); printFeatures(r); printFeatures(c); } }
  • 24. Полиморфизм Результат выполнения кода  название:Прямоугольник площадь:49,75 периметр: 29,90  название:Круг площадь:154,38 периметр: 44,05
  • 25. Домашняя работа 1 Создать класс Pair (пара целых чисел); определить метод умножения на число и операцию сложения пар (a,b) + (c,d) = (а + b, с + d). Определить класс- наследник Money с полями: рубли и копейки. Переопределить операцию сложения и определить методы вычитания и деления денежных сумм. 2. Определить класс Pair с полями типа double. Реализовать операции сложения пар и умножения на число как в задании 1. Определить производный класс Complex и реализовать методы умножения (a, b) (с, d) = (ас - bd, ad + bс) и вычитания (a, b) - (с, d) = (а - b, с - d ).
  • 26. Литература  http://ru.wikipedia.org/wiki/%D0%98%D0%BD %D0%B4%D0%B5%D0%BA%D1%81%D0%BD%D1%8B %D0%B9_%D0%BC %D0%B0%D1%81%D1%81%D0%B8%D0%B2 (определения)  http://www.javable.com/tutorials/fesunov/lesson5/ (примеры)  http://ru.wikibooks.org/wiki/Java  http://ru.wikipedia.org/wiki/ %D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0% BA%D1%86%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD %D0%BD%D1%8B%D1%85 (Абстракция)