Автор работы: Пользователь скрыл имя, 06 Августа 2013 в 10:21, реферат
Казалось бы, на сегодняшний день изобретены уже все языки программирования, какие только можно придумать. Но нет - появился еще один, с названием Java. Этот язык сумел получить весьма заметную известность за последние несколько лет, так как он ориентирован на самую популярную компьютерную среду - сеть Internet и серверы Web.
Персональные компьютеры сделали информационные технологии частью массовой культуры. Тем не менее, уже довольно длительная история развития персональных компьютеров не знала ничего, подобного феномену Java. Что изменилось в мире в последние годы, почему этот феномен стал возможен?
Введение 3
История создания языка Java 6
Основные особенности языка Java 7
Сравнение Java и C++. 13
Список литературы 30
Позднее связывание (и полиморфизм)
Когда различные классы в иерархии переопределяют некоторый метод, очень полезна возможность ссылаться на общий объект этих классов (благодаря совместимости подклассов) и вызывать этот метод, результатом чего будет вызов метода надлежащего класса. Для этого компилятор должен поддерживать позднее связывание, то есть не генерировать вызов специфической функции, а ждать, пока во время выполнения не определятся фактический тип объекта и функция, которую нужно вызвать.
В c++ позднее связывание доступно только для виртуальных методов (вызов которых становится немного медленнее). Метод, объявленный в базовом классе как виртуальный (virtual), поддерживает это свойство (но только если описания методов совпадают). Обычные, не виртуальные методы не позволяют позднее связывание.
В java все методы используют позднее связывание, если вы не отметите их явно как final. Финальные методы не могут быть переопределены и вызываются быстрее. В java написание методов с нужной сигнатурой жизненно важно для обеспечения полиморфизма. Тот факт, что в java по умолчанию используется позднее связывание, тогда как в c++ стандартом является раннее связывание, - явный признак разного подхода этих двух языков: c++ временами жертвует ОО моделью в пользу эффективности, тогда как java – наоборот.
Абстрактные методы и классы
При построении сложной иерархии, для обеспечения полиморфизма программисты часто вынуждены вводить методы в классы верхнего уровня, даже если эти методы ещё не определены для этой специфической абстракции. Здесь можно было бы оставить пустые методы, но многие ОО языки предлагают такой специфический механизм, как определение абстрактных методов, то есть методов без реализации. Классы, имеющие хотя бы один абстрактный метод, часто называется абстрактным классом.
В c++ абстрактные методы или чисто виртуальные функции получаются добавлением, так называемого чистого описателя (=0) в определение метода. Абстрактные классы являются просто классами с одним или более абстрактным методом (или наследующие их). Вы не можете создать объект абстрактного класса.
В java и абстрактные методы, и абстрактные классы отмечаются ключевым словом abstract. Производные классы, которые не переопределяют все абстрактные методы, должны быть отмечены как абстрактные. Как и в c++, нельзя создавать объекты абстрактных классов.
Множественное наследование и интерфейсы
Некоторые ОО языки допускают наследование более чем одному базовому классу. Другие языки позволяют вам наследовать только от одного класса, но дополнительно позволять вам наследовать также от многочисленных интерфейсов или чисто абстрактных классов, то есть классов, состоящих только из виртуальных функций.
С++ поддерживает множественное наследование. Определенно, что множественное и повторяющееся наследование влечет за собой такие понятия, как виртуальные базовые классы, которые нелегко освоить, хотя они предоставляют мощную технику. c++ не поддерживает понятия интерфейсов, хотя их можно заменить множественным наследованием чисто абстрактным классам (интерфейсы можно рассматривать как подмножество множественного наследования).
Java не поддерживает множественное наследование, но полностью поддерживает интерфейсы. Методы интерфейсов допускают полиморфизм, и Вы можете использовать объект, осуществляющий интерфейс, когда ожидается интерфейсный объект. Класс может наследовать или расширить один базовый класс, но может осуществить многочисленные интерфейсы. Хотя это не было спланировано заранее, интерфейсы java очень хорошо укладываются в модель com. Вот пример интерфейса:
public interface canfly
{
public void fly();
}
public class bat extends animal implements canfly
{
public void fly() {// the bat flies...}
}
Список литературы