Hack Bulgaria
github.com/HackBulgaria
Part 2
Рецепта за обекти. Дефинира атрибути и методи
Инстанция на клас с конкретни данни.
State (състояния) +
Behaviour (поведение)
Стойността на неговите атрибути.
Чрез ключовата дума new
Първият метод, ако го има, който се извиква при създаване на нов обект от клас.
Повече от един.
чрез this(arguments)
Вътрешна референция към конкретният обект, върху който се вика даден метод.
Сигнатурата на един метод представлява неговото име + броят и типовете на неговите аргументи.
public void doSomething(String a, String b) {}
doSomething(String, String)
public double calc(double a, int b, boolean c) {}
calc(double, int, boolean)
public class Panda {
public void eat(Bamboo bamboo) {}
public void eat(Bamboo bamboo, int count) {}
public void eat(ArrayList<Bamboo> bamboos) {}
}
eat(Bamboo)
eat(Bamboo, int)
eat(ArrayList<Bamboo>)
public class Person {
public void greet(String firstName,
String lastName) {}
public void greet(String lastName,
String firstName) {}
}
greet(String, String)
greet(String, String)
Този method overloading не е възможен.
assertEquals(double expected, double actual)
assertEquals(String expected, String actual)
assertEquals(int expected, int actual)
...
p1 = new Person("Ivaylo");
p2 = new Person("Ivaylo");
System.out.print(p1 == p2);
false
System.out.print(p1 == p2);
System.out.print(1 == 1); // true
System.out.println(p1.equals(p2));
public class Panda {
public String name;
public boolean equals(Object obj) {
if(!(obj instanceof Panda)) {
return false;
}
Panda other = (Panda) obj;
return this.name.equals(obj.name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Panda)) {
return false;
}
Panda other = (Panda) obj;
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
Някой от вас ще трябва да обясни защо?
// Псевдо Java
interface Cache {
add(key, value)
get(key)
hasValue(key)
}
Cache c = new SomeKindOfCacheImplementation();
c.add('one', 1)
assert c.hasValue('one')
assert c.get('one') == 1
assert c.get('two') == some empty value
// истинска Java
public interface Cache {
public void add(String key, Object value);
public Object get(String key);
public boolean hasValue(String key);
}
public class MemoryCache implements Cache {
private HashMap<String, Object> cache = new HashMap<>();
public void add(String key, Object value) {
cache.put(key, value);
}
public Object get(String key) {
return cache.get(key); // returns null if not present
}
public boolean hasValue(String key) {
return cache.containsKey(key);
}
}
public static void main(String[] args) {
Cache c = new MemoryCache();
}
Cache c = new MemoryCache();
Cache c = ApplicationSettings.getDefaultCache();
By Hack Bulgaria