Главная |
страница 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. * / % 5. >> >>> << 6. > >= < <= 7. == != 8. & 9. ^ 10. | 11. && 12. || 13. ?: 14. = op= Ассоциативность: Неассоциативны: 1, 2, 5, 6, 8, 9, 10, 13, 14, / , % Ассоциативны: *, 4, 7, 11, 12 Java 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"); } 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 String ans = ""; for (int i=0;i ans+=arr[i]+" "; } } //Попробуем запустить всё что написали // 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)); } } 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); } } } # Класс "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 возращает продолжительность в минутах, это уже метод класса, а не экземпляра # а значит обязательно должен быть с аргументом! attr_reader :lyrics def initialize(name, artist, duration, lyrics) # Вызываем конструктор наследуемого класса super(name, artist, duration) @lyrics = lyrics end # Метод Karaoke.play иметирует проигрывание песни, это метод класса, # значит обязательно имеет аргументы print lyrics[i] + " " sleep 1 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.
|