Главная страница 1

Вопросы по языкам Java и Ruby

1. Обьекты, переменные и типы в языках Java и Ruby. Общие черты и отличия. Примеры.


Всё без исключения в Ruby является обьектом. В Java тоже всё является обьектом, но за исключением простых типов, таких как целые, что помогает увеличить скорость. В Java переменные строго типизированы, т е при создании переменной надо указывать её тип, в Ruby этого не требуется. В Ruby существуют следующие типы Числовые - Fixnum, Bignum, Строки - String, Диапозоны – Ranges, и Регулярные выражения – Regular Expressions. Java определяет 8 простых(или элементных) типов данных, которые можно распределить в 4 группы: Целые – byte, short, int, long, Числа с плавающей точкой - float, double, Символы - char, и Логические или булевы - boolean. А так дядя Роганов хочет услышать что ничем вообщем-то Java и Ruby в данном вопросе не отличаются, проверенно на личноим опыте.
class Types{

public static void main(String[] args){

byte minbyte = (byte)( -Math.pow(2,7) );

byte maxbyte = (byte)( Math.pow(2,7)-1 );

short minshort = (short)( -Math.pow(2,15) );

short maxshort = (short)( Math.pow(2,15)-1 );

int minint = (int)( -Math.pow(2,31) );

int maxint = (int)( Math.pow(2,31)-1 );

long minlong = (long)( -Math.pow(2,63) );

long maxlong = (long)( Math.pow(2,63)-1 );

double mindouble = ( -Math.pow(1.7,-308) );

double maxdouble = ( Math.pow(1.7,308) );

float minfloat = (float)( -Math.pow(3.4,38) );

float maxfloat = (float)( Math.pow(3.4,38) );

char minchar = 0;

char maxchar = 65535;

boolean minboolean = false;

boolean maxboolean = true;

System.out.println("byte "+minbyte+"..."+maxbyte);

System.out.println("short "+minshort+"..."+maxshort);

System.out.println("int "+minint+"..."+maxint);

System.out.println("long "+minlong+"..."+maxlong);

System.out.println("double "+mindouble+"..."+maxdouble);

System.out.println("float "+minfloat+"..."+maxfloat);

System.out.println("char "+minchar+"..."+maxchar);

System.out.println("boolean "+minboolean+","+maxboolean);

}

}



2. Приоритеты и ассоциативность операторов в языках Java и Ruby. Примеры.

Приоритеты:




1. () []

2. ++ -- ~ !

3. * / %
4. + -

5. >> >>> <<

6. > >= < <=

7. == !=


8. &

9. ^


10. |

11. &&


12. ||

13. ?:


14. = op=

Ассоциативность:

Неассоциативны: 1, 2, 5, 6, 8, 9, 10, 13, 14, / , %

Ассоциативны: *, 4, 7, 11, 12
3. Основные управляющие конструкции и обработка исключительных ситуаций в языках Java и Ruby. Примеры.
Основные управляющие конструкции это if else, for, while и т. д. Что касается исключительных ситуаций вот наглядный пример:

Java
import java.io.BufferedReader;



import java.io.IOException;

import java.io.InputStreamReader;
class Exceptions{

static String line;

static int words;

public static void main(String[] args) throws Exception{

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));



try{

int ans = 1/0;

System.out.println("Possible to do");

}catch(Exception e){

System.err.println("Impossible to do");

}finally{

System.out.println("The program is terminated");

}

while ( (line=bf.readLine())!="exit\n" ){

if ( (words=line.split(" ").length) > 3 ){

System.err.println("You've entered more then 3 words");



break;

}

System.out.println("Line conteins "+words+ " words" );



}

System.out.println("Maybe you've typed 'exit', I can't say exactly" );



throw new Exception("You've mistake in your DNA" );

//Сюда мы не дойдём и хотелось бы наисать какую-нибудь чушь,как в Ruby,

//но компилятор этого сделать не позволяет

}

}


Ruby
begin #Попробуем разделить 1 на 0

1/0

rescue #Если возникнут ошибки, напишем, что это невозможно

puts "Impossible to do"



else #Если всё пройдёт удачно, напишем, что это возможнол

puts "Possible to do"



ensure #В любом случае напишем что программма завершила работу

puts "The program is terminated"



end
catch (:done) do

while (line = gets)!="exit\n" # Будем считывать строку, пока пользователь не введёт 'exit'

throw :done unless (words = line.split(" ").size) <= 3 #Завершим программу если пользователь ввёл больше 3 слов(пробелов)

puts "Line conteins #{words} words" #Пока программа работает, будем писать сколько слов(пробелов) в введённой строке



end

puts "You've typed 'exit'" #Если пользователь ввёл 'exit' сообщим ему об этом



end
raise "You've mistake in your DNA" # Скажем полбзователю что-нибудь весёлое напоследок(Ввиде сообщения об ошибке)
print"There's no matter what I'm doing here because program have turminated at the moment "

print "by raising an error about user's DNA"


ДЛЯ НАГЛЯДНОСТИ РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ПРОГРАММУ В КОМАНДНОЙ СТРОКЕ!
4. Обьекты и классы в языках Java и Ruby. Методы и их вызов. Операторный синтаксис. Методы экземпляра и класса. Наследование. Конструкторы. Примеры.

Ну собственно всё видно в примере, коменты прилагаются:

Java
class Run{

public static String ArraytoString(String[] arr){

String ans = "";



for (int i=0;i

ans+=arr[i]+" ";

}

return ans.substring(0,ans.length()-2);

}

public static void main(String[] args) throws InterruptedException{

//Попробуем запустить всё что написали

// song – это обьект(экземпляр) класса Song

Song song = new Song("Cardigans", "My favourite game", 0.5);

System.out.println("song artist: " + song._artist);

System.out.println("song name: " + song._name);

System.out.println("song duration in hours: " + song._duration);

System.out.println("song duration in minutes: " + Song.duration_in_minutes(song._duration));

// karaoke – это обьект(экземпляр) класса KaraokeSong

KaraokeSong karaoke = new KaraokeSong("Cardigans", "My favourite game", 0.5,"I /don't /know /what /you're /looking /for /...".split("/") );

System.out.println("karaoke artist: " + karaoke._artist);

System.out.println("karaoke name: " + karaoke._name);

System.out.println("karaoke duration in hours: " + karaoke._duration);

System.out.println("karaoke lyrics: " + ArraytoString(karaoke._lyrics));

System.out.println(KaraokeSong.play(karaoke._lyrics));

}

}
// Класс "Song"



class Song{

String _name, _artist;



double _duration;

Song(String name,String artist,double duration){ // Конструктор класса

_name = name; // Задаём переменные класса

_artist = artist; // Переменные класса в Ruby начиниются c "@"

_duration = duration; // Пусть продолжительность у нас в часах

}

// Метод to_s возращает продолжительность в минутах, это метод экзеппляра



public String toString(){

return "Song: "+_name+_artist+_duration;

}

// Статический метод duration_in_minutes возращает продолжительность в минутах,



// это уже метод класса(статический), а не экземпляра

// а значит в нём запрещается использование всех переменных текущего экземпляра и этот метод является “универсальным” для всех обьектов данного класса!



public static double duration_in_minutes(double duration){

return duration*60;

}

}


// Класс "KaraokeSong", наследует класс "Song"

class KaraokeSong extends Song{

String[] _lyrics;

KaraokeSong(String name,String artist,double duration,String[] lyrics){

// Вызываем конструктор наследуемого класса



super(name, artist, duration);

_lyrics = lyrics;

}

// Статический метод play иметирует проигрывание песни, это метод класса(статический),



// а значит в нём запрещается использование всех переменных текущего экземпляра и этот метод является “универсальным” для всех обьектов данного класса!

public static String play(String[] lyrics) throws InterruptedException{

for (int i=0;i

System.out.print(lyrics[i] + " ");

Thread.sleep(1000);

}

return "\nYOUR SCORE'S 99%, TRY AGAIN!";

}

}

Ruby


# Класс "Song"

class Song

attr_reader :name , :artist, :duration # Разрешаем читать пременный класса



def initialize(name, artist, duration) # Конструктор класса

@name = name # Задаём переменные класса

@artist = artist # Переменные класса в Ruby начиниются c "@"

@duration = duration # Пусть продолжительность у нас в часах

end

# Метод to_s возращает продолжительность в минутах, это метод экзеппляра



def to_s

return "Song: #@name #@artist (#@duration)"

end

# Метод Song.duration_in_minutes возращает продолжительность в минутах, это уже метод класса, а не экземпляра

# а значит обязательно должен быть с аргументом!

def Song.duration_in_minutes(duration)

return duration*60

end

end
# Класс "KaraokeSong", наследует класс "Song"

class KaraokeSong < Song

attr_reader :lyrics



def initialize(name, artist, duration, lyrics)

# Вызываем конструктор наследуемого класса



super(name, artist, duration)

@lyrics = lyrics

end

# Метод Karaoke.play иметирует проигрывание песни, это метод класса,

# значит обязательно имеет аргументы

def KaraokeSong.play(lyrics)

for i in 0 ... lyrics.size

print lyrics[i] + " "

sleep 1

end

return "\nYOUR SCORE'S 99%, TRY AGAIN!"

end



end
# Теперь непостредственно попробуем запустить всё что написали

# song – это обьект(экземпляр) класса Song

song = Song.new("Cardigans", "My favourite game", 0.5)

puts "song artist: " + song.artist

puts "song name: " + song.name

puts "song duration in hours: " + song.duration.to_s

puts "song duration in minutes: " + Song.duration_in_minutes(song.duration).to_s

# karaoke – это обьект(экземпляр) класса KaraokeSong

karaoke = KaraokeSong.new("Cardigans", "My favourite game", 0.5, ["I ", "don't ", "know ", "what ", "you're ", "looking ", "for ", "..."])

puts "karaoke artist: " + karaoke.artist

puts "karaoke name: " + karaoke.name

puts "karaoke duration in hours: " + karaoke.duration.to_s

puts "karaoke lyrics: " + karaoke.lyrics.to_s

puts KaraokeSong.play(karaoke.lyrics)


ДЛЯ НАГЛЯДНОСТИ РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ПРОГРАММУ В КОМАНДНОЙ СТРОКЕ!
Вывод этой программы:
song artist: My favourite game

song name: Cardigans

song duration in hours: 0.5

song duration in minutes: 30.0

karaoke artist: My favourite game

karaoke name: Cardigans

karaoke duration in hours: 0.5

karaoke lyrics: I don't know what you're looking for ...

I don't know what you're looking for ...

YOUR SCORE'S 99%, TRY AGAIN!


В Ruby как и в Java существоет множество операторов, вот некоторые из них:

[ ] ссылка на элемент

[ ]= установить значение элемента по ссылке

** Возведение в степень

! Отрицание

~ Дополнение

+ Плюс

- Минус


* Умножение

/ Деление

>> << Двоичный сдвиг вправо, влево

& Побитовое И

^ Исключающее ИЛИ

| Побитовое ИЛИ



<= < > >= Операторы сравнения

. . .


Операторный синтаксис в Java и Ruby устроен так что мы пишем как привыкли, например a*b+c, на самом же деле выполняется (a.*(b)).+(c). А строчка a[]=5 тоже самое что и a.[]=(5) А так как всё в Ruby является обьектом то мы можем переопределить эти методы, однако это плохая идея, лучше не будем. В Java тоже всё является обьектом, за исключением простых типов, таких как целые, что помогает увеличить скорость работы.




Смотрите также:
1. Обьекты, переменные и типы в языках Java и Ruby. Общие черты и отличия. Примеры
99.2kb.
1. Общие положения о семье и типах семьи
249.87kb.
Отчуждение личности в аспекте философии истории
65.17kb.
Семинар Вертикальные контракты
63.88kb.
Лекция по динамическому программированию (Дятлов Семен Владимирович) Примеры использования дп для поиска оптимального решения
16.71kb.
Xxxii-я Всероссийская дистанционная эвристическая олимпиада по математике (примеры)
105.48kb.
Программа курса для направления 230200. 68 «Информационные системы. Программа Базы знаний»
97.14kb.
Структурно-семантические и функциональные особенности информационных заметок на немецком и русском языках
432.77kb.
Экзаменационный билет по предмету история билет №1 1 Отличия и особенности цивилизационного и формационного подходов в изучении мировой истории. 2 Периодизация средневековья. 3 Эпоха Возрождения в Европе
80.14kb.
Логические выражения и логические переменные
65.06kb.
Реферат 4 глава основные сведения о русской и вьетнамской колыбельной песне 9
913.92kb.
Приложение №1 к Договору на предоставление путевки в детский лагерь Правила детского лагеря Академия звезд» Общие правила
44.03kb.