Next Mac OS X Roots

Next Mac OS X Roots

Mac OS X Roots: Mac OS X NeXT • 1985 Apple kicks out Jobs, who founds NeXT • 1988 NeXTSTEP 0.8: 68k, Mach kernel, 4.3BSD, Display PostScript, new Objective-C, platform for first web browser at CERN • 1990 NeXTSTEP 2.0: Interface Builder (OO) • 1993 Intel, SPARC, HP PA-RISC support (fat binaries), NeXT hardware dead • NeXT&Sun: OPENSTEP, used by SunOS, HP-UX, MacOS, also on Windows NT, GNUstep Jan Borchers 1 media computing group Jan Borchers 2 media computing group Mac OS X Roots: NeXT • 1996 Apple purchases NeXT, Jobs back at Apple, begins replacing Mac OS towards NeXTSTEP • 1999 Apple releases Mac OS X Preview • Mac OS X is directly derived from NeXTSTEP/ OPENSTEP (Mach/BSD, Objective-C, Cocoa, Interface Builder, NetInfo), and combines this with other Apple technologies (UI, Classic, Multimedia) Jan Borchers 3 media computing group Jan Borchers 4 media computing group It’s spelled “Ten” Mac OS X: Architecture Base Operating System Apps UITK Cocoa, Carbon, Java WM • Darwin (Open Source for PowerPC+Intel) WindowServer (user-level process) • Based on a Mach microkernel + BSD Unix BWS • Protected memory, preemptive multitasking GEL Quartz 2D / Core Graphics, IOKit • Single application cannot corrupt/freeze entire system HW 5 Jan Borchers media computing group Jan Borchers 6 media computing group Graphics and Event Library • Quartz 2D / Core Graphics, Display PDF • Roots: NeWS, NeXTSTEP (Display PostScript) • Vector-based, resolution-independent Demo: Quartz Extreme • Quartz Extreme: GPU-based compositing (pipe entire screen through OpenGL if available) • Quartz Extreme 2D / QuartzGL: GPU-based UI rendering (still experimental) • Vista’s XPS is similar to (Display) PDF • The Event Library is contained in IO Kit Jan Borchers 7 media computing group Jan Borchers 8 media computing group Java Carbon Cocoa BSD (JDK) QuickTime User Interface Toolkit Application Services Core Services Kernel Environment • Cocoa AppKit, OO framework • Cocoa is the recommended API for Mac OS X • Implements Aqua Look&Feel • Can be used with Objective-C or Java* • Other part of Cocoa (Foundation framework) • J2SE 5.0 SDK is used for 100% Java/Swing applications contains threads, sockets, etc. • Carbon is an updated version of the old Macintosh Toolbox • Written in Objective-C • Used to easily port existing applications • Carbon apps run on Mac OS 9 and Mac OS X • BSD is used for existing standard Unix applications • WebObjects for web-based services Jan Borchers 9 media computing group Jan Borchers 10 media computing group * Multi-API Problems • Mac OS X has tried to please everyone • Problem: High cost for supporting many APIs • Consequences in 2006: • No new Java bindings for new Cocoa features in Mac OS X 10.5 and beyond (= “Use Objective-C!”) • New Intel Macs do not support Classic Mac OS emulation anymore (= “Classic’s dead!”) • But: New bridges for Ruby and Python since Leopard Steve Jobs burying Mac OS 9 at WWDC 2002 (personal photo) Jan Borchers 11 media computing group Jan Borchers 12 media computing group Event Handling Objective-C • Implementation language of the Cocoa framework • Similar to our • Created in 1983 to combine OO principles with C Reference Model • Inspired by Smalltalk • Window Server • In its concepts very similar to Java, unlike C++ distributes events • Dynamic typing, binding, and loading to per-application • Protocols are analogous to Java’s interfaces (really per- • Classes are objects of type Class process) queues • Reflection possible (not in C++) • Introduces few new language constructs to C Jan Borchers 13 media computing group Jan Borchers 14 media computing group Objective-C: New C Language Constructs Dynamic Typing/Binding/Loading • C++ is a static language, Java and Obj-C are dynamic • status = [socket connectToAddress:127.0.0.1 withPort:80] • In C++, you cannot directly call a method defined in a subclass is analogous to Java’s (e.g., Tshape.draw()) from an object of a superclass (e.g., TObject) —even if you know you could. status = socket.connectToAddressWithPort(127.0.0.1, 80); - Example: Building objects from data read from a file • — for instance methods, + for class methods - The compiler prevents such code from building - You would have to do a dynamic_cast<> • id corresponds to Object, self corresponds to this - Obj-C (and Java) move this check to run-time • @ compiler directives • In C++, a superclass must either contain all the methods any subclass will use, or it must be mixed in using multiple inheritance. • @interface..@end, @implementation..@end,… To add a method to the superclass, all subclasses must be recompiled (fragile bass class problem) • Interface categories allow transparent subclassing - Dynamic Binding avoids bloated superclasses, and minimizes recompilation due to this problem Jan Borchers 15 media computing group Jan Borchers 16 media computing group Objective-C 2.0 (since Leopard) • Supports automatic accessor method generation for object properties • Allows Java-like short-hand syntax to access Demo: Dynamic Binding properties • [object setName:newName]; object.name = newName; • Features an optional garbage collection • Supports fast enumeration of collections • for (object in list) { [object doSomething]; } Jan Borchers 17 media computing group Jan Borchers 18 media computing group Cocoa Cocoa Class Hierarchy NSObject • The UITK (and general toolkit) of Mac OS X •! Fairly flat hierarchy NSEvent • Evolved out of NeXTSTEP NSResponder •! Reason: Delegates, and • Cocoa’s class names still give away its heritage NSWindow ! categories can be used to mix (NSObject,…) NSView ! in functionality • Two main parts NSControl NSButton etc. !!no deep subclassing • Foundation: Basic programming support NSApplication ! required - NSObject, values, strings, collections, OS services, notifications, archiving, NSCell (lightweight controls) • Full hierarchy: see Online Objective-C language services, scripting, distributed objects NSMenu • AppKit: Aqua interface NSMenuItem ! Help in Xcode - Interface, fonts, graphics, color, documents, printing, OS support, etc. international support, InterfaceBuilder support - Largest part (over 100) are interface widgets Jan Borchers 19 media computing group Jan Borchers 20 media computing group Example: NSTableView Delegate Methods Delegates Moving and resizing columns Editing a cell – tableView:didDragTableColumn: – tableView: shouldEditTableColumn:row: – tableViewColumnDidMove: Displaying a cell – tableViewColumnDidResize: • Similar to Listeners in Java – tableView: • A delegate is a class whose methods are called from Selecting in table willDisplayCell:forTableColumn:row: Displaying tooltips another class that wants to plan for extending its – selectionShouldChangeInTableView: – tableView:shouldSelectRow: – tableView: functionality toolTipForCell:rect:tableColumn: – tableView:shouldSelectTableColumn: row:mouseLocation: • E.g., you can write a delegate class for NSTableView that will get – tableViewSelectionIsChanging: Allowing variable height rows called when the user changes the width of a column – tableViewSelectionDidChange: – tableView:heightOfRow: • Delegates solve the fragile base class problem Responding to mouse events • If NSTableView is changed, the delegate class doesn’t need to be – tableView:didClickTableColumn: recompiled – tableView: mouseDownInHeaderOfTableColumn: Jan Borchers 21 media computing group Jan Borchers 22 media computing group Categories: Extending a class Protocols without subclassing • Example: Add a “find&replace” method to NSString • Could subclass “MyNSString”—but then have to change all code to use that new class • Could change NSString itself—but that would require access to the source code for that class (and recompiling, rebinding any code using it,…) • Similar to Java’s interfaces • Instead: Create a category “NSStringExtensions”: • Mostly replace the need for multiple inheritance @interface NSString (NSStringExtensions) - (NSString *)find:(NSString *)findString !! replaceWith:(NSString *)replaceString; @end • Any code using NSString can now use the find:replaceWith: method • An advantage of the Dynamic Loading possible with Objective-C Jan Borchers 23 media computing group Jan Borchers 24 media computing group Events and Actions • Events are generated by user or system (e.g., periodic events) Demo: Categories • Corresponds to input “I” from our formal widget model • Actions are generated by objects (e.g., menus) in response to lower-level events • Corresponds to actions “A” from our formal widget model • InterfaceBuilder lets developer connect actions to custom objects (e.g., from a button to a custom class), using “IBAction” constant in the source Jan Borchers 25 media computing group Jan Borchers 26 media computing group Responders Outlets • Most objects are subclasses of NSResponders and can respond to events • NSApplication can find a responder that can handle an • Outlets are instance variables to refer to other event (respondsToSelector), then call its method objects directly • InterfaceBuilder knows about them and lets the developer connect • Framework takes care of Responder Chain outlets graphically (“IBOutlet” constant) • Example: A custom class that wants to display a result in a text • Events are passed on along the responder chain (key window ! field needs an outlet main window ! application) until they can be handled by some object • Applications, windows, views, etc. can be extended by adding a delegate without having to subclass them Jan Borchers 27 media computing group Jan Borchers 28 media computing group Interface

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    14 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us