State of the Art

This article is a copy of a research work I did today, to draw a map of today’s development technologies. It is not finished (it will never be, actually) but I think it is rather interesting. Hope you find it interesting too :)

Technology Chart

Because software development is an art… the following table gives a quick overview of available object-oriented application blocks & frameworks, with references. This list is not intensive and will most likely change in the future.

Unit TestingJUnitNUnit, NMock, TestDriven.NET
Code DocumentationJavadocXML Code Comments + NDoc
Build toolsAntNAnt
PersistenceHibernate, iBATISNHibernate, Olero ORM, iBATIS, NPersist; Article about Solutions for object persistence in the .NET architecture
Web ApplicationsSpring Framework, Struts, Velocity, JavaServerFacesSpring.NET, ASP.NET, Castle Project
Smart ClientsJFC/SwingWindows Forms
Aspect-Oriented ProgrammingAspectJAspectSharp, SetPoint
IDESun Java Studio Creator, Eclipse, Borland JBuilder, IntelliJ IDEA, Apple Xcode, NetBeans, JCreator, BlueJ, NetComputing AnyJ, DrJavaVisual Studio.NET, Macromedia Dreamweaver, Eclipse, Borland Delphi, #develop, Mainsoft Visual MainWin for Linux, ASP.NET WebMatrix, CodeSmithStudio
Business Rules EngineJESS, JxBRE, ILOGNxBRE, InRule, ILOG
Unit TestingPhpUnitJSUnit
Code DocumentationPHPDoctorJSDoc
Build toolsn/an/a
Web Applicationsn/an/a
Smart ClientsPHP-GTKXUL
Aspect-Oriented ProgrammingaoPHPJavaScript and AOP
AJAXJPSPAN, Flexible AJAX, AjaxACn/a
IDEEclipse, NuSphere, IDE.PHP, Macromedia DreamweaverEclipse, Macromedia Dreamweaver
Business Rules Enginen/an/a
Apple MacintoshMicrosoft Alternative
Unit TestingOCUnitVisual Studio Team System
Code DocumentationHeaderDocn/a
Build toolsAntMSBuild
PersistenceCoreData, DataCruxObjectSpaces
Web ApplicationsWebObjectsClassic ASP (unsupported & unsupportable)
Smart ClientsCocoaAvalon + XAML, MFC
Aspect-Oriented ProgrammingAspectCocoaNative .NET functionality
AJAX(idem Java)Announced
Logginglog4cocoaEnterprise Library’s Logging Application Block
IDEApple Xcode, Metrowerks CodeWarriorn/a
Business Rules Enginen/an/a
C++Ruby on Rails
Unit TestingCppUnitTest::Unit
Code DocumentationCppDocRDoc
Build toolsGNU MakeRant
PersistenceProgress EdgeXtendRuby on Rails
Web ApplicationsASP.NET, C++ Server PagesRuby on Rails, Comparison of Ruby on Rails against Spring + Hibernate
Smart Clientsn/an/a
Aspect-Oriented ProgrammingAspectC++AspectR
AJAXn/aRuby on Rails
IDEEclipse, Apple Xcode, Metrowerks CodeWarrior, Microsoft Visual C++, Borland C++ Builder, Bloodshed Software Dev-C++Mondrian, Arachno Ruby, Eclipse
Business Rules EngineILOGn/a

Global information

Some information about the object-oriented application frameworks above:

PlatformMain Programming LanguagesMultiplatformSingle InheritanceLate-bindingOpen sourceISO StandardInspired from
JavaJavaNeXT OpenStep, C++
.NETC#, Visual Basic.NET, Java, JavaScript, C++ 1Java, COM
JavaScriptJavaScript 2Self, C (NOT from Java!)
CocoaObjective-C, Java, C++NeXT OpenStep, Smalltalk
C++ STL + GCCC++ 3C
Ruby on RailsRubyEiffel, Ada, Perl

(Useless) Comments

As you can see, there are common patterns appearing in the table above:

From an historical point of view, however, the fact that most object-oriented frameworks (that is, those not based on a scripting language) use single inheritance is interesting, and not casual: Objective-C, used for the development of the software created for the NeXT workstation, introduced the notion of “interfaces” first (originally named “protocols”), and this idea was taken lately to Java and .NET.

  1. C#: ISO 23270, CLI: ISO 23271 & 23272 ↩︎

  2. ISO 16262 ↩︎

  3. ISO 14882 ↩︎