Re: How do you make a group level in Java?
"Travis" <NoSpam@Spamstopper.org> wrote in message
news:Xns9C73D9A286C98NoSoyswbellnet@216.196.97.140...
Okay, so I have a text file with a 650 byte record length.
It has a bunch of fields: Name, address, amount, tran-id, etc.
I want to read the record into a record layout to map the fields
as I do in other languages. This is like basic functionality.
How in the heck do you make a group level in Java? Or how about
a redefines or an ORG command to redefine the input string? That
would work. Or a way to DSECT the area?
Example:
Read infile into inrec.
01 inrec.
05 name pic x(30).
05 addr pic x(30).
....and so on.
OR
GET (infile,inrec)
inrec ds 0cl650
name ds cl30
addr ds cl30
....and so on.
See Effective Java by Joshua Bloch. In the first edition, see chapter 5. I
think there is a newer edition which I do not have yet. Basically in Java
you have classes/objects and they can be composed of other classes/objects.
Here is some sample code for Chapter 5 Item 20: Replace unions with class
hierarchies:
C code:
/* Discriminated union */
#include "math.h"
typedef enum {RECTANGLE, CIRCLE} shapeType_t;
typedef struct {
double length;
double width;
} rectangleDimensions_t;
typedef struct {
double radius;
} circleDimensions_t;
typedef struct {
shapeType_t tag;
union {
rectangleDimensions_t rectangle;
circleDimensions_t circle;
} dimensions;
} shape_t;
double area(shape_t *shape) {
switch(shape->tag) {
case RECTANGLE: {
double length = shape->dimensions.rectangle.length;
double width = shape->dimensions.rectangle.width;
return length * width;
}
case CIRCLE: {
double r = shape->dimensions.circle.radius;
return M_PI * (r*r);
}
default: return -1.0; /* Invalid tag */
}
}
int main() {
shape_t rectangle, circle;
rectangle.tag = RECTANGLE;
rectangle.dimensions.rectangle.length = 2.0;
rectangle.dimensions.rectangle.width = 3.0;
printf("Rectangle area: %f\n", area(&rectangle));
circle.tag = CIRCLE;
circle.dimensions.circle.radius = 1.0;
printf("Circle area: %f\n", area(&circle));
return 0;
}
//***************************************************
Java code:
// Page 101
abstract class Shape {
abstract double area();
}
class Circle extends Shape {
final double radius;
Circle(double radius) { this.radius = radius; }
double area() { return Math.PI * radius*radius; }
}
class Rectangle extends Shape {
final double length;
final double width;
Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
double area() { return length * width; }
}
// Page 102
class Square extends Rectangle {
Square(double side) {
super(side, side);
}
double side() {
return length; // or equivalently, width
}
}
//***************************************************
Java test code:
// Test program for class hierarchy on page 101
public class ShapeTest {
public static void main(String args[]) {
Shape rectangle = new Rectangle(2.0, 3.0);
Shape circle = new Circle(2.0);
Shape square = new Square(15.0);
System.out.println("Rectangle area: " + rectangle.area());
System.out.println("Circle area: " + circle.area());
System.out.println("Square area: " + square.area());
}
}