124.66K
Category: programmingprogramming

Абстрактные типы

1.

Абстрактные типы

2.

Пример полиморфизма
class Stone {
double weight;
double price;
double cost() {
return price * weight;
}
}

3.

Пример полиморфизма
class Jewel extends Stone {
double transparent;
double cost() {
return super.cost()
* transparent;
}
}

4.

Пример полиморфизма
class RareJewel extends Jewel {
double cost() {
return super.cost()
* Math.log(Math.E
+ weight);
}
}

5.

Пример полиморфизма
static Stone generate() {
int t = (int)(3*Math.random());
switch(t) {
case 0:
return new Stone();
case 1:
return new Jewel();
case 2:
return new RareJewel();
}
}

6.

Пример полиморфизма
Stone[] s = new Stone[25];
for(int i = 0; i < s.length; i++){
s[i] = generate();
}
for(...) {
if(s[i].cost() > s[j].cost())
}

7.

Пример абстрактного класса
public class Circle {
private double radius;
public double area() {
return Math.PI * radius
* radius;
}
}

8.

Пример абстрактного класса
public class Rectangle {
private double width;
private double height;
public double area() {
return width * height;
}
}

9.

Пример абстрактного класса
public class Rectangle
extends Figure {
public double area() {/*...*/}
}
public class Circle
extends Figure {
public double area() {/*...*/}
}

10.

Пример абстрактного класса
public class Figure {
public double area() {
/* ??? */
}
}

11.

Пример абстрактного класса
public class Figure {
abstract public double area();
}

12.

Пример абстрактного класса
abstract public class Figure {
abstract public double area();
}

13.

Абстрактные методы и классы
abstract public class A {
abstract public void aaa();
abstract public void bbb();
}

14.

Абстрактные методы и классы
abstract public class B
extends A {
abstract public void aaa();
public void bbb() {
/* реализация */
}
}

15.

Абстрактные методы и классы
public class C extends B {
public void aaa() {
/* реализация */
}
}

16.

Абстрактные методы и классы
A x = new A(); // ОШИБКА
B y = new B(); // ОШИБКА
C z = new C();

17.

Абстрактные методы и классы
abstract public class A {
public void aaa() {
/* реализация */
}
public void bbb() {
/* реализация */
}
}

18.

Пример абстрактного класса без
абстрактных методов
public class Author {
private String surname;
private String name;
private String patronymic;
private String degree;
}

19.

Пример абстрактного класса без
абстрактных методов
public class Book {
private String title;
private Author author;
private Integer year;
}

20.

Пример абстрактного класса без
абстрактных методов
public class Reader {
private String surname;
private String name;
private String patronymic;
private Long phone;
private String address;
}

21.

Пример абстрактного класса без
абстрактных методов
public class Usage {
private Reader reader;
private Book book;
private Date issueDay;
private Date returnDay;
}

22.

Пример абстрактного класса без
абстрактных методов
public class Person {
private String surname;
private String name;
private String patronymic;
}

23.

Пример абстрактного класса без
абстрактных методов
public class Author extends
Person
{
private String degree;
}

24.

Пример абстрактного класса без
абстрактных методов
public class Reader extends
Person
{
private Long phone;
private String address;
}

25.

Пример абстрактного класса без
абстрактных методов
abstract public class Person {
private String surname;
private String name;
private String patronymic;
}

26.

Пример чтения данных
public class BookTxtReader {
public Book[] read() {
/* реализация */
}
}

27.

Пример чтения данных
public class BookDBReader {
public Book[] read() {
/* реализация */
}
}

28.

Пример чтения данных
abstract public class BookReader {
abstract public Book[] read();
}

29.

Пример чтения данных
abstract public class BookReader {
abstract public
Book[] readBooks();
abstract public
Author[] readAuthors();
}

30.

Пример чтения данных
abstract public class BookReader {
public Book[] read() {
/* readAuthors() */
/* readBooks() */
}
abstract public
Book[] readBooks();
abstract public
Author[] readAuthors();
}

31.

Пример чтения данных
abstract public class BookReader {
public final Book[] read() {
/* readAuthors() */
/* readBooks() */
}
abstract protected
Book[] readBooks();
abstract protected
Author[] readAuthors();
}

32.

Пример сортировки
public class ReaderSorter {
public Reader[] sort(
Reader[] readers
) {
/* реализация */
}
}

33.

Пример сортировки
public class ReaderSorter {
public Reader[] sortByName(
Reader[] readers
) {
/* реализация */
}
public Reader[] sortByAddress(
Reader[] readers
) {
/* реализация */
}
}

34.

Пример сортировки
abstract public
class ReaderComparator {
abstract public int compare(
Reader r1,
Reader r2
);
}

35.

Пример сортировки
public class ReaderSorter {
public Reader[] sort(
Reader[] readers,
ReaderComparator comparator
) {
/* начало цикла */
if(comparator
.compare(reader[i],
reader[j]) > 0) {
/* обмен */
}
/* конец цикла */
}
}

36.

Пример сортировки
public class ReaderByNameComparator
extends ReaderComparator {
public int compare(Reader r1,
Reader r2) {
/* реализация */
}
}

37.

Пример сортировки
public class ReaderByAddressComparator
extends ReaderComparator {
public int compare(Reader r1,
Reader r2) {
/* реализация */
}
}

38.

Пример сортировки
Reader[] readers = /* создание массива */
ReaderSorter sorter = new ReaderSorter();
ReaderComparator comparator;
comparator = new ReaderByNameComparator();
sorter.sort(readers, comparator);
/* вывод массива readers */
comparator = new ReaderByAddressComparator();
sorter.sort(readers, comparator);
/* вывод массива readers */

39.

Пример сортировки
abstract public
class ReaderComparator {
abstract public int compare(
Reader r1,
Reader r2
);
}

40.

Пример сортировки
public interface ReaderComparator {
int compare(Reader r1, Reader r2);
}

41.

Пример сортировки
public class ReaderByNameComparator
implements ReaderComparator {
public int compare(Reader r1,
Reader r2) {
/* реализация */
}
}

42.

Пример сортировки
public class ReaderByAddressComparator
implements ReaderComparator {
public int compare(Reader r1,
Reader r2) {
/* реализация */
}
}

43.

Интерфейсы
public interface A {
int x; // public final static
void test(); // abstract public
}

44.

Интерфейсы
public interface A {
int x; // public final static
void test(); // abstract public
}
public class B implements A {}
public class C extends X
implements A {}
public class D implements A1, A2, A3 {}
English     Русский Rules